Pagini recente » Monitorul de evaluare | Cod sursa (job #1513050) | Cod sursa (job #1289442) | Cod sursa (job #902718) | Cod sursa (job #1718753)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
using namespace std;
const int modulo = 666013;
int m[2][2] = { { 0, 1 }, { 1, 1 } }, sol[2][2] = { { 1,0},{0,1} },aux[2][2],n;
FILE *f = fopen("kfib.in", "r");
void inmultire(int m1[2][2], int m2[2][2], int m3[2][2])
{
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
m3[i][j] = (m3[i][j] + (1ll*m1[i][k] * m2[k][j])) % modulo;
}
void rid_put_log(int put)
{
int i;
for (i = 0; (1 << i) <= put; i++){
if ((put & (1 << i)) != 0 ){
memset(aux, 0, sizeof(aux));
inmultire(sol, m, aux);
memcpy(sol, aux, sizeof(aux));
}
memset(aux, 0, sizeof(aux));
inmultire(m, m, aux);
memcpy(m, aux, sizeof(aux));
}
}
int main()
{
fscanf(f, "%d", &n);
rid_put_log(n-1);
//sol[1][1]=(sol[0][1]+sol[1][1])%modulo;
printf("%d ",sol[1][1]);
return 0;
}