Pagini recente » Cod sursa (job #1007082) | Cod sursa (job #670491) | Cod sursa (job #48120) | Cod sursa (job #149169) | Cod sursa (job #1202670)
#include <cstdio>
#define i64 long long
const char IN[]="kfib.in";
const char OUT[]="kfib.out";
const int MAX = 2;
const int MOD = 666013;
#define op %MOD
using namespace std;
i64 sol[MAX][MAX],aux[MAX][MAX];
inline void mulmat(i64 a[][MAX],i64 b[][MAX]);
inline int putlog(int n);
int main( )
{
int k;
freopen( IN , "r" , stdin );
freopen( OUT , "w" , stdout );
scanf("%d",&k);
printf("%d\n",putlog(k));
return 0;
}
inline void mulmat(i64 a[][MAX],i64 b[][MAX])
{
i64 aa,bb,c,d;
aa=(a[0][0]*b[0][0]+ a[0][1]*b[1][0])op;
bb=(a[0][0]*b[0][1]+ a[0][1]*b[1][1])op;
c=( a[1][0]*b[0][0]+ a[1][1]*b[1][0])op;
d=( a[1][0]*b[0][1]+ a[1][1]*b[1][1])op;
a[0][0]=aa;a[0][1]=bb;a[1][0]=c;a[1][1]=d;
}
inline int putlog(int n)
{
aux[0][1]=aux[1][0]=aux[1][1]=sol[0][0]=sol[1][1]=1;
for(;n;n>>=1){
if(n&1)mulmat(sol,aux);
mulmat(aux,aux);
}
return sol[0][1];
}