Pagini recente » Cod sursa (job #2776461) | Cod sursa (job #1539023) | Cod sursa (job #590581) | Cod sursa (job #2664763) | Cod sursa (job #591022)
Cod sursa(job #591022)
#include <stdio.h>
#include <string.h>
long long z[2][2] = {{0, 1}, {1, 1}};
long long r[2][2] = {{1, 0}, {0, 1}};
long long aux[2][2] = {{0, 0}, {0, 0}};
long long div = 666013;
void multiply(long long (*m1)[2][2], long long m2[2][2])
{
int i, j, k;
memset(aux, 0, sizeof(aux));
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
aux[i][j] += (*m1)[i][k] * m2[k][j];
for (i = 0; i < 2; i++)
for (j = 0; j < 2; j++)
(*m1)[i][j] = aux[i][j] % div;
}
long long kfib(long p)
{
do
{
int b = p % 2;
if (b)
multiply(&r, z);
multiply(&z, z);
p = p / 2;
} while (p > 0);
return r[1][1];
}
int main()
{
int k;
freopen("kfib.in", "r", stdin);
freopen("kfib.out", "w", stdout);
scanf("%d", &k);
printf("%lld", kfib(k - 1));
return 0;
}