Pagini recente » Cod sursa (job #711734) | Cod sursa (job #1499579) | Cod sursa (job #2165649) | Cod sursa (job #2264011) | Cod sursa (job #1649904)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#define mod 666013
using namespace std;
int k;
inline void mult(int a[3][3],int b[3][3],int c[3][3])
{
int i,j,p;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(p=0;p<2;p++)
c[i][j]=(c[i][j]+1LL*a[i][p]*b[p][j])%mod;
}
inline int put(int p)
{
int a[3][3],b[3][3],aux[3][3],sol[3][3];
a[0][0]=0; a[1][0]=a[0][1]=a[1][1]=1;
sol[0][0]=sol[1][1]=1; sol[0][1]=sol[1][0]=0;
for(int i=0;(1<<i)<=p;i++)
{
if( (1<<i)&p )
{
memset(aux,0,sizeof(aux));
mult(sol,a,aux);
memcpy(sol,aux,sizeof(aux));
}
memset(aux,0,sizeof(aux));
memcpy(b,a,sizeof(a));
mult(b,a,aux);
memcpy(a,aux,sizeof(aux));
}
return (sol[0][0]+sol[0][1])%mod;
}
int main()
{
freopen("kfib.in","r",stdin);
freopen("kfib.out","w",stdout);
scanf("%d",&k);
printf("%d\n",put(k-1));
fclose(stdin);
fclose(stdout);
return 0;
}