0425 - Viete
De la Universitas MediaWiki
Cerință
Se consideră ecuația de gradul al doilea ax^2+bx+c=0 cu coeficienți întregi și un număr natural n. Să se determine Sn=x1^n+x2^n unde x1 și x2 sunt rădăcinile ecuației, folosind relațiile lui Viete.
Date de intrare
Programul citește de la tastatură numerele a b c n.
Date de ieșire
Programul afișează pe ecran numărul S, reprezentând valoarea cerută.
Restricții de precizări
- 1 ≤ n ≤ 10
- -10 ≤ b,c ≤ 10, a = 1
- rezultatul se va înscrie pe 32 de biți cu semn
Indicații de rezolvare
Considerăm relațiile lui Viete
S=x1+x2=−ba
P=x1⋅x2=ca Se demonstrează că:
Sn=S⋅Sn−1−P⋅Sn−2
S1=S
S2=S2−2⋅P Pentru rezolvarea problemei folosim relațiile de mai sus.
Exemplul 1:
- Intrare
- 1 -3 2 4
- Ieșire
- Datele de intrare corespund restrictiilor impuse.
- 17
Exemplul 2:
- Intrare
- 5 20 20 4
- Ieșire
- Datele de intrare nu corespund restrictiilor impuse.
Rezolvare
def verificare_restrictii(nr_a, nr_b, nr_c, nr_n): # functia de verificare a datelor de intrare
if nr_a == 1 and -10 <= nr_b <= 10 and -10 <= nr_c <= 10 and 1 <= nr_n <= 10:
return True
else:
return False
def solve(nr_a, nr_b, nr_c, nr_n):
global sn
s = -nr_b/nr_a
p = nr_c/nr_a
if nr_n == 1:
return int(s)
elif nr_n == 2:
return int(s**2 - 2*p)
else:
sn_minus_1 = s**2 - 2*p
sn_minus_2 = s
for _ in range(3, nr_n+1):
sn = s*sn_minus_1 - p*sn_minus_2
sn_minus_2 = sn_minus_1
sn_minus_1 = sn
return int(sn) # Adăugăm această linie pentru a returna sn
if __name__ == '__main__':
try:
a = int(input("Introduceti numarul a: "))
b = int(input("Introduceti numarul b: "))
c = int(input("Introduceti numarul c: "))
n = int(input("Introduceti numarul n: "))
if verificare_restrictii(a, b, c, n):
print("Datele de intrare corespund restrictiilor impuse.")
print(solve(a, b, c, n))
else:
print("Datele de intrare nu corespund restrictiilor impuse.")
except ValueError:
print("Datele de intrare nu corespund restrictiilor impuse.")
Explicație
S=3,P=2
S1=S=3
S2=S^2−2⋅ P=3^2−2⋅2=5
S3=S⋅S2−P⋅S1=3⋅5−2⋅3=9
S4=S⋅S3−P⋅S2=3⋅9−2⋅5=17