Pagini recente » Cod sursa (job #3277415) | Cod sursa (job #1060223) | Cod sursa (job #2719209) | Cod sursa (job #1115002) | Cod sursa (job #930988)
Cod sursa(job #930988)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("kfib.in");
ofstream out ("kfib.out");
const int MOD = 666013;
int Ans[3][3], A[3][3], C[3][3];
inline void Mul (int A[3][3], int B[3][3])
{
C[1][1] = ((long long) A[1][1] * B[1][1]) % MOD + ((long long) A[1][2] * B[2][1]) % MOD;
C[1][2] = ((long long) A[1][1] * B[1][2]) % MOD + ((long long) A[1][2] * B[2][2]) % MOD;
C[2][1] = ((long long) A[2][1] * B[1][1]) % MOD + ((long long) A[2][2] * B[2][1]) % MOD;
C[2][2] = ((long long) A[2][1] * B[1][2]) % MOD + ((long long) A[2][2] * B[2][2]) % MOD;
A[1][1] = C[1][1] % MOD;
A[1][2] = C[1][2] % MOD;
A[2][1] = C[2][1] % MOD;
A[2][2] = C[2][2] % 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][2] % MOD;
}
int main()
{
int N;
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);
return 0;
}