Pagini recente » Cod sursa (job #1239120) | Cod sursa (job #2579042) | Statistici Nedelcu Georgiana Daniela (georgiana.nedelcu) | Cod sursa (job #598860) | Cod sursa (job #2199723)
#include <array>
#include <fstream>
#define MODULO 666013
typedef std::array<std::array<long, 2>, 2> ARR;
ARR matrixMultiply(ARR m, ARR n) {
ARR nm;
nm[0][0] = (((m[0][0] % MODULO) * (n[0][0] % MODULO)) % MODULO + ((m[0][1] % MODULO) * (n[1][0] % MODULO)) % MODULO) % MODULO;
nm[0][1] = (((m[0][0] % MODULO) * (n[0][1] % MODULO)) % MODULO + ((m[0][1] % MODULO) * (n[1][1] % MODULO)) % MODULO) % MODULO;
nm[1][0] = (((m[1][0] % MODULO) * (n[0][0] % MODULO)) % MODULO + ((m[1][1] % MODULO) * (n[1][0] % MODULO)) % MODULO) % MODULO;
nm[1][1] = (((m[1][0] % MODULO) * (n[0][1] % MODULO)) % MODULO + ((m[1][1] % MODULO) * (n[1][1] % MODULO)) % MODULO) % MODULO;
return nm;
}
ARR matrixPower(ARR m, unsigned power) {
if (power == 1) return m;
if (power % 2 == 0) {
return matrixPower(matrixMultiply(m, m), power / 2);
} else {
return matrixMultiply(m, matrixPower(m, power - 1));
}
}
int main() {
std::ifstream in("kfib.in");
std::ofstream out("kfib.out");
long k;
in >> k;
if (k == 0) {
out << 0;
return 0;
}
if (k == 1) {
out << 1;
return 0;
}
ARR a;
a[0][0] = 0;
a[0][1] = 1;
a[1][0] = 1;
a[1][1] = 1;
a = matrixPower(a, k - 1);
out << a[1][1];
return 0;
}