Cod sursa(job #3234969)

Utilizator AlexSerban21Serban Alexandru AlexSerban21 Data 13 iunie 2024 10:41:19
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#define mod 666013
using namespace std;
ifstream fin ("kfib.in");
ofstream fout ("kfib.out");
int n,p;
int mat[2][2]= {{1,0},{0,0}},fib[2][2]= {{1,1},{1,0}};
void prod (int a[2][2],int b[2][2])
{
    int c[2][2]= {{0,0},{0,0}};
    for (int i=0; i<2; i++)
    {
        for (int j=0; j<2; j++)
        {
            int sum=0;
            for (int g=0; g<2; g++)
                sum=(sum+1ll*a[i][g]*b[g][j])%mod;
            c[i][j]=sum;
        }
    }
    for (int i=0; i<2; i++)
    {
        for (int j=0; j<2; j++)
            a[i][j]=c[i][j];
    }
}
int main()
{
    fin>>n;
    if (n==0)
    {
        fout<<0;
        return 0;
    }
    if (n==1)
    {
        fout<<1;
        return 0;
    }
    n--;
    for (p=0; (1<<p)<=n; p++)
    {
        if ((n>>p)&1)
            prod (mat,fib);
        prod (fib,fib);
    }
    fout<<mat[0][0];
    return 0;
}