Cod sursa(job #2066865)

Utilizator DeanWinchesterdean winchester DeanWinchester Data 15 noiembrie 2017 16:55:23
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
using namespace std;
ifstream cin("kfib.in");
ofstream cout("kfib.out");
int n,a[3][3],i[3][3];

void produs(int a[3][3],int b[3][3],int c[3][3])
{
    c[1][1]=((1ll*a[1][1]*b[1][1])%666013+(1ll*a[1][2]*b[2][1])%666013)%666013;
    c[1][2]=((1ll*a[1][1]*b[1][2])%666013+(1ll*a[1][2]*b[2][2])%666013)%666013;
    c[2][1]=((1ll*a[2][1]*b[1][1])%666013+(1ll*a[2][2]*b[2][1])%666013)%666013;
    c[2][2]=((1ll*a[2][1]*b[1][2])%666013+(1ll*a[2][2]*b[2][2])%666013)%666013;

}
void copiere(int a[3][3],int c[3][3])
{
    a[1][1]=c[1][1];
    a[1][2]=c[1][2];
    a[2][1]=c[2][1];
    a[2][2]=c[2][2];
}
void pa(int n,int a[3][3])
{
    int b[3][3];
    if(n==1)
        return;
    pa(n/2,a);
    produs(a, a ,b);
    if(n%2!=0)
        produs(b,i,a);
    else
        copiere(a,b);

}

int main()
{

    cin>>n;
    a[1][1]=a[1][2]=a[2][1]=i[1][1]=i[1][2]=i[2][1]=1;
    if(n>2)
     {
         pa(n-2,a);
         cout<<(a[1][1]+a[2][1])%666013<<"\0";
     }
     else
        cout<<1;
    return 0;

}