Pagini recente » Cod sursa (job #2373609) | Cod sursa (job #2724334) | Cod sursa (job #2527728) | Cod sursa (job #1478723) | Cod sursa (job #1841281)
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
#define MOD 666013
void inmultire(int a[2][2], int b[2][2]) {
int res[2][2];
res[0][0] = ((long long) a[0][0] * b[0][0] + (long long) a[0][1] * b[1][0]) % MOD;
res[0][1] = ((long long) a[0][0] * b[0][1] + (long long) a[0][1] * b[1][1]) % MOD;
res[1][0] = ((long long) a[1][0] * b[0][0] + (long long) a[1][1] * b[1][0]) % MOD;
res[1][1] = ((long long) a[1][0] * b[0][1] + (long long) a[1][1] * b[1][1]) % MOD;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
a[i][j] = res[i][j];
}
}
}
void putere(int a[2][2], int put) {
if (put == 1) {
return;
} else if (put % 2 == 1) {
int b[2][2] = {{0, 1}, {1, 1}};
putere(a, put - 1);
inmultire(a, b);
return;
} else {
putere(a, put / 2);
inmultire(a, a);
}
}
int main()
{
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int a[2][2] = {{0, 1}, {1, 1}}, k;
fin >> k;
putere(a, k - 1);
fout << a[1][1];
fin.close();
fout.close();
return 0;
}