Cod sursa(job #1789149)

Utilizator Twonk32Georgescu Cadence Twonk32 Data 26 octombrie 2016 18:49:01
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
using namespace std;
#define MOD 666013
long long n, m[2][2];
long long res[2][2];

inline void inmultire(long long a[2][2], long long b[2][2]){
    long long 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])%MOD + (a[0][1] * b[1][0]) % MOD)%MOD;
    aux[0][1]=((a[0][0] * b[0][1])%MOD + (a[0][1] * b[1][1])%MOD)%MOD;
    aux[1][0]=((a[1][0] * b[0][0])%MOD + (a[1][1] * b[1][0])%MOD)%MOD;
    aux[1][1]=((a[1][0] * b[0][1])%MOD + (a[1][1] * b[1][1])%MOD)%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;
    m[0][0] = 0;
    res[0][1] = res[1][0] = res[1][1] = 1;
    res[0][0] = 0;
    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(i);
        cout << res[0][0] << " ";
}