Cod sursa(job #2150119)

Utilizator netfreeAndrei Muntean netfree Data 3 martie 2018 11:47:58
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

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

const ll mod = 666013;

ll a[3][3];

void prll_matrice(ll a[3][3]){
    for(ll i = 1; i<=2; ++i, cout << "\n")
        for(ll j = 1; j<=2; ++j, cout << " ")
            cout << a[i][j];
    cout << "\n";
}

void cpy(ll from[3][3], ll to[3][3]){
    for(ll i = 1; i<=2; ++i)
        for(ll j = 1; j<=2; ++j)
            to[i][j] = from[i][j] % mod;
}

void inmultire (ll a[3][3],ll b[3][3], ll c[3][3]){
    for(ll i = 1; i<=2; ++i)
        for(ll j = 1; j<=2; ++j){
            c[i][j] = 0;
            for(ll k = 1; k<=2; ++k)
                c[i][j] += (a[i][k]%mod*b[k][j]%mod)%mod;
            c[i][j] %= mod;
        }
}

ll rez[3][3], n;

void inmlog(ll n){
    ll temp[3][3];

    for(; n; n >>= 1){
        if(n & 1){
        inmultire(rez, a, temp);
        cpy(temp, rez);
        }
        inmultire(a, a, temp);
        cpy(temp, a);
    }
}

int main()
{
    rez[1][1] = 1;
    rez[1][2] = 0;
    rez[2][1] = 0;
    rez[2][2] = 1;

    a[1][1] = 0;
    a[1][2] = 1;
    a[2][1] = 1;
    a[2][2] = 1;

    fin >> n;
    inmlog(n - 1);
    prll_matrice(rez);
    fout << rez[2][2];
    return 0;
}