Pagini recente » Cod sursa (job #969046) | Cod sursa (job #2612283) | Cod sursa (job #1326519) | Cod sursa (job #1160346) | Cod sursa (job #3163301)
#include <iostream>
#include <fstream>
#define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int p[2][2], a[2][2], c[2][2], n;
void Produs(int a[2][2], int b[2][2], int c[2][2])
{
int i, j, k;
for (i = 0; i <= 1; i++)
for (j = 0; j <= 1; j++)
{
c[i][j] = 0;
for (k = 0; k <= 1; k++)
c[i][j] += 1LL * a[i][k] * b[k][j] % MOD;
c[i][j] %= MOD;
}
}
void Copie(int a[2][2], int b[2][2])
{
int i, j;
for (i = 0; i <= 1; i++)
for (j = 0; j <= 1; j++)
a[i][j] = b[i][j];
}
void Exp(int a[2][2], int n)
{
p[0][0] = p[1][1] = 1;
p[0][1] = p[1][0] = 0;
while (n > 0)
{
if (n % 2 == 1)
{
Produs(p, a, c);
Copie(p, c);
}
n /= 2;
Produs(a, a, c);
Copie(a, c);
}
}
int main()
{
a[0][1] = a[1][0] = a[1][1] = 1;
fin >> n;
if (n == 0)
{
fout << "0\n";
return 0;
}
Exp(a, n - 1);
fout << p[1][1] << "\n";
return 0;
}