Pagini recente » Cod sursa (job #2221381) | Cod sursa (job #1363436) | Cod sursa (job #1197229) | Cod sursa (job #2647091) | Cod sursa (job #2043133)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
long long MOD = 666013;
struct matrice
{
long long a=0,b=1;
long long c=1,d=1;
};
matrice SMALLEST_MATRIX;
matrice produsMatrice(matrice A, matrice B)
{
matrice C;
C.a = (A.a * B.a + A.b * B.c) % MOD;
C.b = (A.a * B.b + A.b * B.d) % MOD;
C.c = (A.c * B.a + A.d * B.c) % MOD;
C.d = (A.c * B.b + A.d * B.d) % MOD;
return C;
}
matrice pow(matrice base, long long exp)
{
//cout<<base<<" "<<exp<<"\n";
if(exp == 0) return SMALLEST_MATRIX;
if(exp == 1) return base;
if(exp%2 == 1)
return produsMatrice(pow(produsMatrice(base, base), exp/2), base);
else if(exp%2 == 0)
return pow((produsMatrice(base, base)), exp/2);
}
int main()
{
long long n;
in>>n;
n = 2707124;
--n;
matrice SOL = pow(SMALLEST_MATRIX, n);
cout<<SOL.a<<" "<<SOL.b<<"\n";
cout<<SOL.c<<" "<<SOL.d<<"\n";
out<<SOL.d;
return 0;
}