Pagini recente » Cod sursa (job #112643) | Cod sursa (job #1284033) | Cod sursa (job #1570742) | Cod sursa (job #2865949) | Cod sursa (job #1536972)
#include <cstdio>
#define MOD 666013
long long rez[3][3], crez[3][3], I[3][3], CI[3][3];
int copiere(long long a[3][3], long long b[3][3])
{
int i,j;
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)
a[i][j]=b[i][j];
}
int inmultire(long long a[3][3], long long b[3][3], long long x[3][3])
{
x[1][1]=(a[1][1]*b[1][1] + a[1][2]*b[2][1])%MOD;
x[1][2]=(a[1][1]*b[1][2] + a[1][2]*b[2][2])%MOD;
x[2][1]=(a[2][1]*b[1][1] + a[2][2]*b[2][1])%MOD;
x[2][2]=(a[2][1]*b[1][2] + a[2][2]*b[2][2])%MOD;
}
int main(){
freopen("kfib.in" , "r" , stdin);
freopen("kfib.out" , "w" , stdout);
int k;
scanf("%d" , &k);
k=k-2;
//I:
I[1][1]=0;
I[1][2]=1;
I[2][1]=1;
I[2][2]=1;
//rez:
rez[1][1]=rez[2][2]=1;
//CI:
CI[1][1]=0;
CI[1][2]=1;
CI[2][1]=1;
CI[2][2]=1;
//crez:
crez[1][1]=rez[2][2]=1;
while(k!=0){
if(k%2==1)
{
copiere(crez, rez);
inmultire(crez, I, rez);
k--;
}
else
{
k=k/2;
copiere(CI, I);
inmultire(CI, CI, I);
}
}
printf("%lld" , (rez[1][2]+rez[2][2])%MOD);
return 0;
}