Cod sursa(job #2501342)

Utilizator Cosmin3105Cosmin Colceru Cosmin3105 Data 29 noiembrie 2019 15:48:40
Problema Al k-lea termen Fibonacci Scor 55
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("kfib.in");
ofstream fout("kfib.out");

const int mod = 666013;

int a[2][2] = {{0, 1}, {1, 1}};
int r[2][2] = {{0, 1}, {1, 1}};
int c[2][2], d[2][2];

void mult_mat(int a[2][2], int b[2][2], int r[2][2])
{
    for(int j = 0; j <= 1; j++)
        for(int k = 0; k <= 1; k++)
            c[j][k] = a[j][k];

    for(int j = 0; j <= 1; j++)
        for(int k = 0; k <= 1; k++)
            d[j][k] = b[j][k];

    r[0][0] = (1LL * c[0][0] * d[0][0]) % mod + (1LL * c[0][1] * d[1][0]) % mod;
    r[0][1] = (1LL * c[0][0] * d[0][1]) % mod + (1LL * c[0][1] * d[1][1]) % mod;
    r[1][0] = (1LL * c[1][0] * d[0][0]) % mod + (1LL * c[1][1] * d[1][0]) % mod;
    r[1][1] = (1LL * c[1][0] * d[0][1]) % mod + (1LL * c[1][1] * d[1][1]) % mod;
}

int k;

int main()
{
    fin >> k;

    while(k){
        if(k % 2 == 1)
            mult_mat(r,a,r);
        mult_mat(a,a,a);
        k /= 2;
    }

    fout << r[0][0];

    return 0;
}