Mai intai trebuie sa te autentifici.
Cod sursa(job #3356459)
| Utilizator | Data | 1 iunie 2026 15:08:41 | |
|---|---|---|---|
| Problema | Al k-lea termen Fibonacci | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 1.25 kb |
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
#define MOD 660634
typedef struct{
vector <int> z1 = {1, 0};
vector <int> z2 = {0, 1};
}MATRICE;
MATRICE inmultire_M(MATRICE m, MATRICE n){
MATRICE rez;
rez.z1[0] = (m.z1[0] * n.z1[0] + m.z2[0] * n.z1[1]) % MOD;
rez.z1[1] = (m.z1[1] * n.z1[0] + m.z2[1] * n.z1[1]) % MOD;
rez.z2[0] = (m.z1[0] * n.z2[0] + m.z2[0] * n.z2[1]) % MOD;
rez.z2[1] = (m.z1[1] * n.z2[0] + m.z2[1] * n.z2[1]) % MOD;
return rez;
}
MATRICE logexp(MATRICE i, MATRICE z, int p){
cout << z.z1[0] << endl << z.z1[1] << endl << z.z2[0] << endl << z.z2[1] << endl << endl;
if (p == 0){
return i;
}
if(p % 2 == 0){
return logexp(i, inmultire_M(z, z), p / 2);
}
if(p % 2 == 1){
return inmultire_M(z, logexp(i, inmultire_M(z, z), p / 2));
}
return i;
}
int main (){
vector <int> m1 = {0, 1};
int k;
MATRICE z, r, i;
fin >> k;
cout << k;
z.z1[0] = 0;
z.z1[1] = 1;
z.z2[0] = 1;
z.z2[1] = 1;
r = logexp(i, z, k - 1);
k = r.z2[1] % MOD;
fout << k;
fin.close();
fout.close();
return 0;
}