Pagini recente » Cod sursa (job #910660) | Cod sursa (job #2435784) | Cod sursa (job #1232691) | Cod sursa (job #1552721) | Cod sursa (job #930944)
Cod sursa(job #930944)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("kfib.in");
ofstream out ("kfib.out");
const int MOD = 666013;
inline void Mul (int A[3][3], int B[3][3])
{
long long C[3][3];
C[1][1] = (long long) 1LL * A[1][1] * B[1][1] + 1LL * A[1][2] * B[2][1];
C[1][2] = (long long) 1LL * A[1][1] * B[1][2] + 1LL * A[1][2] * B[2][2];
C[2][1] = (long long) 1LL * A[2][1] * B[1][1] + 1LL * A[2][2] * B[2][1];
C[2][2] = (long long) 1LL * A[2][1] * B[1][2] + 1LL * A[2][2] * B[2][2];
for (int i = 1; i <= 2; i ++)
for (int j = 1; j <= 2; j ++)
A[i][j] = C[i][j] % MOD;
}
inline int lgpow (int A[3][3], int P)
{
int Ans[3][3];
Ans[1][1] = 1;
Ans[2][2] = 1;
for ( ; P; P >>= 1){
if (P & 1)
Mul (Ans, A);
Mul (A, A);
}
return Ans[1][2];
}
int main()
{
int N, A[3][3];
A[1][1] = 0;
A[1][2] = 1;
A[2][1] = 1;
A[2][2] = 1;
in >> N;
if (N < 3){
out << 1;
return 0;
}
out << lgpow (A, N - 3);
return 0;
}