Cod sursa(job #2144001)

Utilizator raducostacheRadu Costache raducostache Data 26 februarie 2018 14:05:30
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
//
//  main.cpp
//  p2sah
//
//  Created by Radu Costache on 25/02/2018.
//  Copyright © 2018 Radu Costache. All rights reserved.
//

#include <fstream>

#define MOD 666013

using namespace std;

ifstream f("kfib.in");
ofstream g("kfib.out");

long long n,p,k,c = 3,a = 1,A,B,C,x,y,z;
void Mult(long long a[2][2],long long b[2][2]){
    int i,j;
    long long aux[4][4];
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
        {aux[i][j]=0;
            for(int q=0;q<2;q++)
                aux[i][j]+=a[i][q]*b[q][j]%MOD;}
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
            a[i][j]=aux[i][j];}
void exp(long long T[2][2],int n){
    if(n == 0 || n == 1)return;
    long long M[2][2] = {{1,1},{1,0}};
    exp(T,n/2);
    Mult(T,T);
    if(n % 2)
        Mult(T,M);
}
long long tribonacci(int n){
    long long T[2][2] = {{1,1},{1,0}};
    if(n == 0 || n == 1){
        return 0;
    }
    else {
        exp(T, n + 2);
        return T[0][0];
    }
}

int main(int argc, const char * argv[]) {
    // insert code here...
    f >> n;
    g << tribonacci(n);
    return 0;
}