Cod sursa(job #1952415)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 4 aprilie 2017 09:18:23
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <cstdio>
#define MOD 666013
using namespace std;
int a[3][3],rez[3][3],aux[3][3];
void inm(int a[3][3],int b[3][3])
{
    int i,j,k;
    for(i=1;i<=2;i++)
        for(j=1;j<=2;j++)
    {
        aux[i][j]=0;
        for(k=1;k<=2;k++)
            aux[i][j]+=((long long)a[i][k]*(long long)b[k][j])%MOD;
    }
    for(i=1;i<=2;i++)
        for(j=1;j<=2;j++)
            a[i][j]=aux[i][j]%MOD;
}

int main()
{
    freopen("kfib.in","r",stdin);
    freopen("kfib.out","w",stdout);
    int n;
    scanf("%d",&n);
    a[1][2]=a[2][1]=a[2][2]=1;
    rez[1][1]=rez[2][2]=1;
    while(n>0)
        if(n%2==0)
        {
            n/=2;
            inm(a,a);
        }
        else
        {
            n--;
            inm(rez,a);
        }
    printf("%d",rez[1][2]);
    return 0;
}