Cod sursa(job #2243416)

Utilizator rnqftwcalina florin daniel rnqftw Data 20 septembrie 2018 14:05:30
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<bits/stdc++.h>

using namespace std;


int sol[2][2] = {{1,0},{0,1}}, n;
int a[2][2] = { {0,1}, {1,1} };
const int mod = 666013 ;
void inmultire(int a[2][2] , int b[2][2]){

    int c[2][2] = {0};

    for(int i = 0 ; i < 2 ; i ++)
        for(int j = 0 ; j < 2 ; j ++){
            for(int k = 0 ; k < 2 ; k ++)
                c[i][j] = (c[i][j] + (1LL * a[i][k] * b[k][j])%mod) %mod ;
        }

    for(int i = 0 ; i < 2 ; i ++)
        for(int j = 0 ; j < 2 ; j ++)
            a[i][j] = c[i][j];

}

void power(int n){

    while(n > 0 ){
        if(n & 1)
            inmultire(sol , a);
        inmultire(a,a);
       n = n >> 1 ;
    }
}

int main(){
    ifstream in("kfib.in");
    ofstream out("kfib.out");
    int n ;
    in >> n ;
    power(n - 1) ;

    out << sol [1][1];

}