Cod sursa(job #3232280)

Utilizator Bolfa_DBolfa Diana Bolfa_D Data 29 mai 2024 18:28:50
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
void ori(long long a[][5], long long b[][5])
{
    long long c[5][5],s;
    for(int i=0;i<=1;++i)
    {
        for(int j=0;j<=1;++j)
        {
            s=0;
            for(int k=0;k<=1;++k)
                s=(s+b[k][j]*a[i][k]%MOD)%MOD;
            c[i][j]=s;
        }
    }

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

void pwr(int p, long long a[][5])
{
    if(p>1)
    {
        if(p%2==0)
        {
            ori(a,a);
            pwr(p/2, a);
        }
        else
        {
            long long c[5][5];
            for(int i=0;i<=1;++i)
                for(int j=0;j<=1;++j)
                    c[i][j]=a[i][j];

            ori(a,a);
            pwr(p/2,a);
            ori(a,c);
        }
    }
}

long long k, ans[5][5], fib[5][5];
int main()
{
    fin>>k;

    fib[0][1]=fib[1][1]=fib[1][0]=1;
    pwr(k-2,fib);

    ans[0][0]=ans[0][1]=1;
    if(k-2>0)
        ori(ans,fib);
    fout<<ans[0][1];

    return 0;
}