Cod sursa(job #1788437)

Utilizator Twonk32Georgescu Cadence Twonk32 Data 25 octombrie 2016 23:33:12
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
using namespace std;
#define MOD 666013
int n, m[2][2];
int res[2][2];
inline void inmultire(int a[2][2], int b[2][2]){
    int aux[2][2];
    aux[0][0]=aux[1][0]=aux[0][1]=aux[1][1]=0;

    aux[0][0]=(a[0][0] * b[0][0] + a[0][1] * b[1][0])%MOD;
    aux[0][1]=(a[0][0] * b[0][1] + a[0][1] * b[1][1])%MOD;
    aux[1][0]=(a[1][0] * b[0][0] + a[1][1] * b[1][0])%MOD;
    aux[1][1]=(a[1][0] * b[0][1] + a[1][1] * b[1][1])%MOD;

    a[0][0] = aux[0][0];
    a[0][1] = aux[0][1];
    a[1][1] = aux[1][1];
    a[1][0] = aux[1][0];
}

inline void lgput(int n){
    m[0][1] = m[1][0] = m[1][1] = 1;
    res[0][1] = res[1][0] = res[1][1] = 1;

    while (n) {
        if (n % 2) {
            inmultire(res, m);
            n--;
        }

        inmultire (m, m);
        n/=2;
    }
}

int main(){
    freopen("kfib.in","r", stdin);
    freopen("kfib.out", "w", stdout);
    int n;
    cin >> n;
    lgput(n);
    cout << res[0][0];
}