Pagini recente » Cod sursa (job #1734866) | Cod sursa (job #182368) | Cod sursa (job #37949) | Cod sursa (job #2952002) | Cod sursa (job #2636714)
#include <bits/stdc++.h>
#define newline '\n'
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
///***********************
using ll = long long;
const int MOD = 666013;
int k;
int a[3][3], b[3][3], mtp[3][3];
void multMat(int x[][3], int y[][3]) {
int r[3][3];
ll sum;
for (int i = 1; i <= 2; i++)
for (int j = 1; j <= 2; j++) {
sum = 0;
for (int k = 1; k <= 2; k++)
sum += (1LL * x[i][k] * y[k][j]);
r[i][j] = sum % MOD;
}
memcpy(x, r, sizeof(r));
}
void lgPow(int p) {
mtp[1][1] = mtp[2][2] = 1;
while (p) {
if (p & 1)
multMat(mtp, b);
multMat(b, b);
p >>= 1;
}
}
int main() {
fin >> k;
if (!k)
fout << 0;
else if (k <= 2)
fout << 2;
else {
a[1][2] = 1;
b[1][2] = b[2][1] = b[2][2] = 1;
lgPow(k - 1);
multMat(a, mtp);
fout << a[1][2];
}
fout << newline;//*/
fout.close();
return 0;
}