# PBinfo #629 – Zet – Rezolvare C++

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

## Enunț

Fie \(z \in R, z \neq 0\) astfel încât \(z + \frac{1}{z} = k, k \in N\).

Cerința
Dându-se k și un număr natural n, se cere:
a) să calculați \(z^2 + \frac{1}{z^2}\) ;
b) să se determine \(z^n + \frac{1}{z^n}\) .

Date de intrare
Fişierul de intrare zet.in conţine pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea  2. Pe următoarea linie se află numerele k şi n, cu semnificaţiile din enunţ. 

Date de ieșire
p. Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire zet.out se va scrie un singur număr natural reprezentând rezultatul calculului cerut la punctul a).

Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință. În acest caz, fişierul de ieşire zet.out va conține un singur număr natural reprezentând rezultatul calculului cerut la punctul b).

Restricții și precizări

2 ≤ k < 30
3 ≤ n ≤ 13
Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte.

Exemplul 1:
zet.in

1
3 5
zet.out

7
Explicație
p = 1

Atenție! Pentru acest test se rezolvă doar cerința a).

Exemplul 2:
zet.in

2
3 5
zet.out

123
Explicație
p = 2

Atenție! Pentru acest test se rezolvă doar cerința b).

## Cod sursă C++

```cpp
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ofstream fout("zet.out");
ifstream fin("zet.in");
int N , K, p;
long long V[15];
long long f(int n)
{
    if(V[n]>0)
        return V[n];
    V[n] = K * f(n - 1) - f(n - 2);
    return V[n];
}
int main()
{
    fin >> p;
    fin >> K;
    fin >> N;
    V[0] = 2;
    V[1] = K;
    if(p == 1)
        fout << f(2) << "\n";
    else
        fout << f(N) << "\n";
    fout.close();
    fin.close();
    return 0;
}
```

## Resurse

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