Pagini recente » Cod sursa (job #73117) | Cod sursa (job #2770372) | Cod sursa (job #61621) | Cod sursa (job #1060288) | Cod sursa (job #2246370)
#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 ;
}
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];
}
void zero(long long a[3][3]){
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
a[i][j] = 0;
}
int put(int p, long long z[3][3]){
long long aux[3][3], sol[3][3];
zero(sol);
sol[0][0] = 1;
sol[1][1] = 1;
while (p){
if (p % 2 == 1){
zero(aux);
p--;
inmult(z, sol, aux);
mut(sol, aux);
}
zero(aux);
inmult(z, z, aux);
mut(z, aux);
p /= 2;
}
return sol[1][1] % MOD;
}
int main()
{
long long z[3][3], k;
z[0][0] = 0;
z[0][1] = 1;
z[1][0] = 1;
z[1][1] = 1;
fin >> k;
fout << put(k - 1, z);
return 0;
}