Cod sursa(job #2294462)

Utilizator al3xionescuIonescu Alexandru al3xionescu Data 2 decembrie 2018 14:20:10
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("kfib.in");
ofstream g("kfib.out");
struct matrice {
    long long m[4][4];
};
const int MOD = 666013;
int k;
matrice inm(matrice a, matrice b) {
    matrice c;
    c.m[1][1] = c.m[1][2] = c.m[2][1] = c.m[2][2] = 0;
    c.m[1][1] = ((a.m[1][1] * b.m[1][1]) + (a.m[1][2] * b.m[2][1])) % MOD;
    c.m[1][2] = ((a.m[1][1] * b.m[1][2]) + (a.m[1][2] * b.m[2][2])) % MOD;
    c.m[2][1] = ((a.m[1][1] * b.m[2][1]) + (a.m[2][2] * b.m[2][1])) % MOD;
    c.m[2][2] = ((a.m[1][2] * b.m[2][1]) + (a.m[2][2] * b.m[2][2])) % MOD;
    return c;
}
void putere(matrice &a, int b) {
    matrice rez, ak = a;
    rez.m[1][2] = rez.m[2][1] = 0;
    rez.m[1][1] = rez.m[2][2] = 1;
    while(b) {
        if (b % 2) {
            rez = inm(rez, ak);
        }
        ak = inm(ak, ak);
        b /= 2;
    }
    a = rez;
}
void afisare(matrice a) {
    g << a.m[1][1] << ' ' << a.m[1][2] << '\n';
    g << a.m[2][1] << ' ' << a.m[2][2] << '\n';
    g << '\n';
}
int main() {
    f >> k;
    matrice a;
    a.m[1][1] = 0;
    a.m[1][2] = 1;
    a.m[2][1] = 1;
    a.m[2][2] = 1;
    putere (a, k - 1);
    return 0;
}