Pagini recente » Cod sursa (job #1815378) | Cod sursa (job #2837902) | Cod sursa (job #2557041) | Cod sursa (job #1094937) | Cod sursa (job #3154616)
#include <fstream>
using namespace std;
const int MOD = 666013;
ifstream in("kfib.in");
ofstream out("kfib.out");
/// (F0 F1) * Z^i = (Fi Fi+1)
int K, Z[3][3] = {{0, 0, 0}, {0, 0, 1}, {0, 1, 1}};
void copiere(int A[][3], int B[][3])
{
for (int i = 1; i <= 2; i++)
for (int j = 1; j <= 2; j++)
A[i][j] = B[i][j];
}
void inmultire(int A[][3], int B[][3])
{
int C[3][3], D[3][3];
copiere(C, A);
copiere(D, B);
for (int i = 1; i <= 2; i++)
for (int j = 1; j <= 2; j++)
{
A[i][j] = 0;
for (int k = 1; k <= 2; k++)
{
A[i][j] += (1LL * C[i][k] * D[k][j]) % MOD;
A[i][j] %= MOD;
}
}
}
void exponentiere(int n)
{
int val[3][3] = {{0, 0, 0}, {0, 1, 0}, {0, 0, 1}};
while (n)
{
if (n & 1)
inmultire(val, Z);
inmultire(Z, Z);
n >>= 1;
}
copiere(Z, val);
}
int main()
{
in >> K;
exponentiere(K);
out << Z[2][1];
in.close();
out.close();
return 0;
}