# PBinfo #425 – Viete – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: deivid

## Enunț

Cerinţa
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 
$$S_n=x_1^n+x_2^n$$
unde \(x_1\) și \(x_2\) 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 şi 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=x_1+x_2=-\frac{b}{a}$$
$$P=x_1 \cdot x_2 = \frac{c}{a}$$

Se demonstrează că:

$$S_n = S \cdot S_{n-1}-P \cdot S_{n-2}$$
$$S_1 = S$$
$$S_2 = {S ^ 2}-{2 \cdot P}$$

Pentru rezolvarea problemei folosim relațiile de mai sus.

Exemplu:
Intrare

1 -3 2 4
Ieșire

17
Explicație
$$S=3, P=2$$

$$S_1 = S = 3$$

$$S_2 = { S^2 }-{2 \cdot P }={3^2}-{2 \cdot 2}=5$$

$$S_3 = {S \cdot S_2 }-{P \cdot S_1 }={3 \cdot 5}-{2 \cdot 3}=9$$

$$S_4 = {S \cdot S_3 }-{P \cdot S_2 }={3 \cdot 9}-{2 \cdot 5}=17$$

## Cod sursă C++

```cpp
#include <iostream>
#include <cassert>
#include <cstdlib>
using namespace std;
int main(){
	int n, a, b, c, S,P;
	cin >> a >> b >> c >> n;
	S = -b/a, P = c/a;
	int S2 = S, S1 = 1 + 1, S3;
	if(n==1)
		cout << S2;
	else
	{
		for(int i=2 ; i<=n ; ++i)
		{
			S3 = S*S2 - P * S1;
			S1 = S2;
			S2 = S3;
		}
		cout << S3;
	}
	return 0;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/425)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/425/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-425/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
