Pagini recente » Cod sursa (job #1826418) | Cod sursa (job #704933) | Cod sursa (job #1700258) | Cod sursa (job #531089) | Cod sursa (job #2214913)
#include <iostream>
#include <fstream>
#include <cassert>
#include <algorithm>
#include <cstring>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
void mul(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 k = 0; k < 2; ++ k)
C[i][j] = (C[i][j] + ((((long long) A[i][k]) * B[k][j]) % 666013LL)) % 666013;
}
}
memcpy(A, C, sizeof C);
}
void f(int Z[2][2], int K) {
int R[2][2] = {{1, 0}, {0, 1}};
for (int i = 30; i >= 0; -- i) {
mul(R, R);
if ((K >> i) & 1)
mul(R, Z);
}
memcpy(Z, R, sizeof R);
}
int main(){
int K;
fin >> K;
int Z[2][2] = {{0, 1}, {1, 1}};
f(Z, K - 1);
fout << Z[1][1] << '\n';
return 0;
}