Pagini recente » Cod sursa (job #192132) | Cod sursa (job #1238012)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define mod 666013
using namespace std;
int p, sol[5][5], Z[5][5];
void mult(int a[5][5], int b[5][5])
{
int c[5][5];
memset(c, 0, sizeof(c));
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
c[i][j] = (c[i][j] + (1LL * a[i][k] * b[k][j])%mod)%mod;
memcpy(a, c, sizeof(c));
}
void out()
{
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
cerr << sol[i][j] << " ";
cerr << "\n";
}
cerr << sol[1][1];
}
void rise(int p)
{
if (p == 0) {sol[1][1] = 0; return;}
if (p == 1 || p == 2) return;
p -= 2;
for (int i = 0; (1<<i) <= p; i++)
{
if ((p>>i) & 1)
mult(sol, Z);
mult(Z, Z);
}
}
int main()
{
freopen("kfib.in", "r", stdin);
freopen("kfib.out", "w", stdout);
scanf("%d", &p);
Z[0][1] = Z[1][0] = Z[1][1] = 1;
memcpy(sol, Z, sizeof(Z));
//for (int i = 0; i < p-2; i++)
// mult(sol, Z);
rise(p);
printf("%d\n", sol[1][1]);
//out();
return 0;
}