Pagini recente » Cod sursa (job #1997151) | Cod sursa (job #1792904) | Cod sursa (job #3277153) | Cod sursa (job #1310450) | Cod sursa (job #1990775)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("kfib.in");
ofstream out("kfib.out");
long long ans[3][3];
void mat(long long n[][3], long long m[][3], long long p[][3])
{
p[1][1]=(n[1][1]*m[1][1]+n[1][2]*m[2][1])%666013;
p[1][2]=(n[1][1]*m[1][2]+n[1][2]*m[2][2])%666013;
p[2][1]=(n[2][1]*m[1][1]+n[2][2]*m[2][1])%666013;
p[2][2]=(n[2][1]*m[1][2]+n[2][2]*m[2][2])%666013;
}
long long p[3][3];
void rid(long long x[][3], long long k)
{
while(k!=0)
{if(k%2!=0)
{
mat(ans,x,p);
ans[1][1]=p[1][1]; ans[1][2]=p[1][2]; ans[2][1]=p[2][1]; ans[2][2]=p[2][2];
k--;
}
mat(x,x,p);
x[1][1]=p[1][1]; x[1][2]=p[1][2]; x[2][1]=p[2][1]; x[2][2]=p[2][2];
k=k/2;
}}
int main()
{
ans[1][1]=1; ans[1][2]=0; ans[2][1]=0; ans[2][2]=1;
long long x[3][3];
x[1][1]=0; x[1][2]=1; x[2][1]=1; x[2][2]=1;
long long k; in>>k;
rid(x,k-2);
long long m[3][3]; m[1][1]=0; m[1][2]=1;
mat(m,ans,x);
out<<(x[1][1]+x[1][2])%666013;
}