Pagini recente » Cod sursa (job #685689) | Cod sursa (job #1433227) | Cod sursa (job #2672915) | Cod sursa (job #849241) | Cod sursa (job #1571667)
#include<iostream>
#define MOD 666013
#include<fstream>
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
long long int P[2][2], X[2][2];
int n;
/// functia care inmulteste doua matrice, fiecare de 2, pe 2 si pune rez in C
void Inmultire(long long int A[2][2], long long int B[2][2], long long int C[2][2])
{
C[0][0] = A[0][0] * B[0][0] + A[0][1] * B[1][0];
C[0][1] = A[0][0] * B[0][1] + A[0][1] * B[1][1];
C[1][0] = A[1][0] * B[0][0] + A[1][1] * B[1][0];
C[1][1] = A[1][0] * B[0][1] + A[1][1] * B[1][1];
}
void Putere(int n)
{
// X-ul e I2
X[0][0] = X[1][1] = 1;
X[0][1] = X[1][0] = 0;
while (n>0)
{
if (n & 1)
{
n--;
Inmultire(X, P, X);
}
n >>= 1;
Inmultire(P, P, P);
}
fout << X[1][1] << "\n";
}
int main ()
{
fin >> n;
P[0][0] = 0;
P[0][1] = 1;
P[1][0] = 1;
P[1][1] = 1;
if (n <= 1) fout << n << "\n";
else Putere(n-1);
fin.close();
fout.close();
return 0;
}