Pagini recente » Cod sursa (job #2939136) | Cod sursa (job #995217) | Cod sursa (job #2207497) | Cod sursa (job #39104) | Cod sursa (job #3135268)
#include <stdio.h>
#include <stdlib.h>
#define mod 666013
FILE *fin = NULL;
FILE *fout = NULL;
int k;
int baza[3][3], sol[3][3];
void inmult_matr(int a[3][3], int b[3][3])
{
long long int c[3][3];
for(int i = 1; i <= 2; i++)
{
for(int j = 1; j <= 2; j++)
{
c[i][j] = 0;
}
}
for(int i = 1; i <= 2; i++)
{
for(int j = 1; j <= 2; j++)
{
for(int k = 1; k <= 2; k++)
{
c[i][j] = (c[i][j] + (long long)(a[i][k]) * (long long)(b[k][j])) % mod;
}
}
}
for(int i = 1; i <= 2; i++)
{
for(int j = 1; j <= 2; j++)
{
a[i][j] = c[i][j];
}
}
}
void lgput()
{
sol[1][1] = sol[2][2] = 1;
baza[1][1] = baza[1][2] = baza[2][1] = 1;
baza[2][2] = 0;
while(k)
{
if(k % 2)
{
inmult_matr(sol, baza);
}
inmult_matr(baza, baza);
k = k / 2;
}
if((fout = fopen("kfib.out", "w")) == NULL)
{
exit(-1);
}
fprintf(fout, "%d", sol[1][1]%mod);
fclose(fout);
}
int main(void)
{
if((fin = fopen("kfib.in", "r")) == NULL)
{
exit(-1);
}
fscanf(fin, "%d", &k);
fclose(fin);
k--;
lgput();
return 0;
}