Pagini recente » Cod sursa (job #2111000) | Cod sursa (job #3273996) | Cod sursa (job #2410209) | Cod sursa (job #3136911) | Cod sursa (job #469160)
Cod sursa(job #469160)
#include <iostream>
#include <fstream>
#include <cstdio>
#define mod 666013
#define lint long long
using namespace std;
const char iname[] = "kfib.in";
const char oname[] = "kfib.out";
ifstream fin(iname);
ofstream fout(oname);
lint A[3][3], B[3][3], C[3][3];
int i, j, k, MAT[3][3], N;
void mul(lint A[3][3], lint B[3][3], lint C[3][3])
{
int i, j, k;
for(k = 0; k < 2; k ++)
for(i = 0; i < 2; i ++)
for(j = 0; j < 2; j ++)
C[i][j] = (C[i][j] + (long long)(A[i][k] * B[k][j])) % mod;
}
void afis (lint a[][3])
{
for (int i = 0; i < 2; ++i)
{
for (int j = 0; j < 2; ++j)
printf ("%lld ", a[i][j]);
printf ("\n");
}
printf ("\n\n");
}
void lgput(int niv)
{
int x[64];
int nx = 0, i;
int exp = niv;
while (niv > 0)
if (niv % 2 == 0)
x[nx++] = niv,
niv /= 2;
else
x[nx++] = niv ,
--niv;
reverse (x, x + nx);
for (i = 1; i < nx; ++i)
{
if (x[i] % 2 == 0)
{
mul(A, A, C);
memcpy(A, C, sizeof(C));
memset(C, 0, sizeof(C));
}
else
{
mul(A, B, C);
memcpy(A, C, sizeof(C));
memset(C, 0, sizeof(C));
}
}
}
int main()
{
fin >> N;
A[0][0] = 0, A[1][0] = 1, A[0][1] = 1, A[1][1] = 1;
B[0][0] = 0, B[1][0] = 1, B[0][1] = 1, B[1][1] = 1;
N = 2707124;
lgput(N);
//printf ("%lld\n", A[1][0]);
fout << A[1][0];
return 0;
}