Pagini recente » Cod sursa (job #660426) | Cod sursa (job #198502) | Cod sursa (job #2477140) | Cod sursa (job #1550816) | Cod sursa (job #930982)
Cod sursa(job #930982)
#include <cstdio>
#include <iostream>
using namespace std;
const int MOD = 666013;
int Ans[3][3], A[3][3];
inline void Mul (int A[3][3], int B[3][3])
{
int C[3][3];
C[1][1] = (long long) (A[1][1] * B[1][1]) % MOD + (A[1][2] * B[2][1]) % MOD;
C[1][2] = (long long) (A[1][1] * B[1][2]) % MOD + (A[1][2] * B[2][2]) % MOD;
C[2][1] = (long long) (A[2][1] * B[1][1]) % MOD + (A[2][2] * B[2][1]) % MOD;
C[2][2] = (long long) (A[2][1] * B[1][2]) % MOD + (A[2][2] * B[2][2]) % MOD;
int i, j;
for (i = 1; i <= 2; i ++)
for (j = 1; j <= 2; j ++)
A[i][j] = C[i][j] % MOD;
}
inline int lgpow (int A[3][3], int P)
{
Ans[1][1] = 1;
Ans[1][2] = 0;
Ans[2][1] = 0;
Ans[2][2] = 1;
for ( ; P; P >>= 1){
if (P & 1)
Mul (Ans, A);
Mul (A, A);
}
return Ans[1][1] % MOD;
}
int main()
{
freopen ("kfib.in", "r", stdin);
freopen ("kfib.out", "w", stdout);
int N;
A[1][1] = 0;
A[1][2] = 1;
A[2][1] = 1;
A[2][2] = 1;
scanf ("%d", &N);
if (N < 3){
printf ("1");
return 0;
}
printf ("%d", lgpow (A, N + 1));
return 0;
}