Pagini recente » Cod sursa (job #1168598) | Cod sursa (job #179897) | Cod sursa (job #3163189) | Cod sursa (job #1346606) | Cod sursa (job #1442512)
#include <fstream>
#include <string.h>
using namespace std;
const int M = 666013;
ifstream fin("kfib.in");
ofstream fout ("kfib.out");
int N,Z[2][2],Sol[2][2];
inline void Mult(int A[2][2],int B[2][2],int C[2][2])
{
for (int i = 0;i < 2;i++)
for (int j = 0;j < 2;j++)
for (int k = 0;k < 2;k++)
C[i][j] = (C[i][j] + 1LL*A[i][k]*B[k][j]) % M;
}
inline void Solve(int P)
{
int C[2][2];
Z[0][1] = Z[1][0] = Z[1][1] = 1;
memcpy(Sol,Z,sizeof(Z));
while (P)
{
if (P % 2)
{
memset(C,0,sizeof(C));
Mult(Sol,Z,C);
memcpy(Sol,C,sizeof(C));
}
memset(C,0,sizeof(C));
Mult(Z,Z,C);
memcpy(Z,C,sizeof(C));
P /= 2;
}
}
int main()
{
fin >> N;
Solve(N-1);
fout << Sol[1][0] << "\n";
return 0;
}