Pagini recente » Cod sursa (job #1802762) | Cod sursa (job #1182339) | Cod sursa (job #372008) | Cod sursa (job #1453621) | Cod sursa (job #2670560)
#include <bits/stdc++.h>
const int MOD = 666013;
struct Matrix {
int a[2][2]{0};
Matrix() = default;
Matrix(int x, int y, int z, int t) {
a[0][0] = x;
a[0][1] = y;
a[1][0] = z;
a[1][1] = t;
}
static Matrix I_2() { return {1, 0, 0, 1}; }
friend void operator*=(Matrix &A, const Matrix &B) {
Matrix R;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
R.a[i][j] = (R.a[i][j] + 1LL * A.a[i][k] * B.a[k][j]) % MOD;
A = R;
}
friend Matrix operator^(Matrix A, unsigned p) {
Matrix R = Matrix::I_2();
for (; p; p >>= 1) {
if (p & 1) R *= A;
A *= A;
}
return R;
}
int item() { return a[1][0]; }
};
int main() {
freopen("kfib.in", "r", stdin);
freopen("kfib.out", "w", stdout);
unsigned k;
scanf("%d", &k);
Matrix m(0, 1, 1, 1);
printf("%d\n", (m ^ k).item());
return 0;
}