Cod sursa(job #2404106)

Utilizator DavidAA007Apostol David DavidAA007 Data 12 aprilie 2019 12:12:54
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include<fstream>
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int x,b[2][2],a[2][2],p[2][2],i,j,m,s,k;
int main()
{
    fin>>x;
    m=666013;
    ///a
    a[0][0]=0;
    a[0][1]=1;
    a[1][0]=1;
    a[1][1]=1;
    ///p
    p[0][0]=1;
    p[0][1]=0;
    p[1][0]=0;
    p[1][1]=1;
    do
    {
        if(x%2==1)
        {
            for(i=0;i<=1;i++)
                for(j=0;j<=1;j++)
                {
                    s=0;
                    for(k=0;k<=1;k++)
                        s=(s+(long long)a[i][k]*p[k][j])%m;
                    b[i][j]=s;
                }
            for(i=0;i<=1;i++)
                for(j=0;j<=1;j++)
                    p[i][j]=b[i][j];
        }
        x=x/2;
        for(i=0;i<=1;i++)
            for(j=0;j<=1;j++)
            {
                s=0;
                for(k=0;k<=1;k++)
                    s=(s+(long long)a[i][k]*a[k][j])%m;
                b[i][j]=s;
            }
        for(i=0;i<=1;i++)
            for(j=0;j<=1;j++)
                a[i][j]=b[i][j];
    }
    while(x>0);
    fout<<p[x][1];
    fin.close();
    fout.close();
    return 0;
}