Pagini recente » Cod sursa (job #3041539) | Cod sursa (job #967270) | Cod sursa (job #1926216) | Cod sursa (job #1418978) | Cod sursa (job #3325600)
#include <fstream>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
const int MD = 666013;
int M[2][2], R[2][2], T[2][2];
void mm(int A[2][2], int B[2][2], int C[2][2]) {
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
C[i][j] = 0;
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
for (int k = 0; k < 2; k++)
C[i][j] = (C[i][j] + 1LL * A[i][k] * B[k][j]) % MD;
}
int main() {
int k;
fin >> k;
M[0][0] = 1; M[0][1] = 1;
M[1][0] = 1; M[1][1] = 0;
R[0][0] = 1; R[0][1] = 0;
R[1][0] = 0; R[1][1] = 1;
k -= 2;
while (k > 1) {
if (k % 2 == 0) {
mm(M, M, T);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
M[i][j] = T[i][j];
k /= 2;
} else {
mm(R, M, T);
for (int i = 0; i < 2; i++)
for (int j = 0; j < 2; j++)
R[i][j] = T[i][j];
k--;
}
}
mm(M, R, T);
fout << (T[0][0] + T[0][1]) % MD;
return 0;
}