Pagini recente » Cod sursa (job #1962728) | Cod sursa (job #2207267) | Cod sursa (job #1062992) | Cod sursa (job #1020050) | Cod sursa (job #2215386)
#include <iostream>
#include <fstream>
#define mod 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
void inmult(long long a[3][3], long long b[3][3], long long c[3][3]) {
int i, j, k;
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
c[i][j] = (c[i][j] + (a[i][k] * b[j][k]) % mod) % mod;
}
void init(long long a[3][3]) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
a[i][j] = 0;
}
void mut(long long a[3][3], long long b[3][3]) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
a[i][j] = b[i][j] % mod;
}
int pow(int p, long long Z[3][3]) {
long long sol[3][3], aux[3][3];
init(aux);
init(sol);
sol[0][0] = 1;
sol[1][1] = 1;
while (p) {
if (p % 2 == 1) {
init(aux);
inmult(Z, sol, aux);
mut(sol, aux);
p--;
}
init(aux);
inmult(Z, Z, aux);
mut(Z, aux);
p = p / 2;
}
return sol[1][1] % mod;
}
int main()
{
long long Z[3][3], k;
fin >> k;
Z[0][0] = 0;
Z[0][1] = 1;
Z[1][0] = 1;
Z[1][1] = 1;
fout << pow(k - 1, Z);
}