Cod sursa(job #2242123)

Utilizator cezarzbughinCezar Zbughin cezarzbughin Data 17 septembrie 2018 20:24:55
Problema Al k-lea termen Fibonacci Scor 5
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

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

typedef tuple<long int,long int ,long int> matr;
int n;
const int M=666013;

matr operator *(matr a,matr b)
{
    int x1,y1,z1,x2,y2,z2;
    tie(x1,y1,z1)=a;
    tie(x2,y2,z2)=b;
    return make_tuple( (((x1%M)*(x2%M))%M + ((y1%M)*(y2%M))%M)%M,  (((x1%M)*(y2%M))%M+ ((y1%M)*(z2%M))%M)%M,  (((y1%M)*(y2%M))%M+ ((z1%M)*(z2%M))%M)%M  );
}

matr fibonacci(matr a,int b)
{
    if(b==0)return make_tuple(1,0,1);
    if(!b%2)
    {
        matr c=fibonacci(a,b/2);
        return c*c;
    }
    else return a*fibonacci(a,b-1);
}

int main()
{
    matr a=make_tuple(1,1,0);
    f>>n;
    a=fibonacci(a,n);
    cout<<(1<<31)-1;
    g<<get<1>(a);
    //g<<get<0>(a)<<' '<<get<1>(a)<<' '<<get<2>(a);
}