Pagini recente » Istoria paginii runda/sim02 | Cod sursa (job #2041617) | Cod sursa (job #190735) | Cod sursa (job #2458288) | Cod sursa (job #801856)
Cod sursa(job #801856)
#include<stdio.h>
#include<string.h>
#define MOD 666013
int N;
long long const_mat[3][3], mat[3][3];
void inm_mat(long long a[3][3], long long b[3][3], long long d[3][3]) {
int i, j, k;
long long c[3][3], val;
val = 0;
for(i=1; i<=2; i++)
for(j=1; j<=2; j++) {
for(k=1; k<=2; k++)
val += ((a[i][k] % MOD) * (b[k][j] % MOD)) % MOD;
c[i][j] = val % MOD;
val = 0;
}
memcpy(d,c,sizeof(c));
}
void put(int p) {
for(; p; p/=2) {
if(p%2==1)
inm_mat(mat,const_mat,mat);
inm_mat(const_mat,const_mat,const_mat);
}
}
int main() {
freopen("kfib.in","r",stdin);
freopen("kfib.out","w",stdout);
int i, j;
const_mat[1][1] = 0;
const_mat[1][2] = const_mat[2][1] = const_mat[2][2] = 1;
mat[1][1] = mat[2][2] = 1;
mat[1][2] = mat[2][1] = 0;
scanf("%d",&N);
put(N-1);
printf("%d\n",mat[2][2]);
return 0;
}