Pagini recente » Cod sursa (job #2231223) | Cod sursa (job #1414394) | Borderou de evaluare (job #1342690) | Cod sursa (job #318608) | Cod sursa (job #2345474)
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
long long k;
struct mat {
long long M[2][2];
};
mat mat0={
1,0,
0,1
};
mat mati={
1,1,
1,0
};
mat prod (mat A,mat B)
{
mat a;
a.M[0][0]=(A.M[0][0]*B.M[0][0]+A.M[0][1]*B.M[1][0])%MOD;
a.M[0][1]=(A.M[0][0]*B.M[0][1]+A.M[0][1]*B.M[1][1])%MOD;
a.M[1][0]=(A.M[1][0]*B.M[0][0]+A.M[1][1]*B.M[1][0])%MOD;
a.M[1][1]=(A.M[1][0]*B.M[0][1]+A.M[1][1]*B.M[1][1])%MOD;
return a;
}
mat lgput(mat M,long long k)
{
if(k==0)
return mat0;
if(k%2==0)
return lgput(prod(M,M),k/2);
return prod(M,lgput(prod(M,M),k/2));
}
int main()
{
fin>>k;
fout<<lgput(mati,k).M[0][1];
return 0;
}