Cod sursa(job #788716)

Utilizator round2Test P round2 Data 15 septembrie 2012 17:47:51
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <cstdio>
#include <cstring>
#define Mod 666013

typedef long long ll;

ll u[2][2]={{0,1},{1,1}},f[2][2]={{0,1},{1,1}},n;

void prod(ll x[2][2])
{
    ll a[2][2];
    memset(a,0,sizeof(a));
    for(int i=0;i<2;i++)
    for(int j=0;j<2;j++)
    for(int k=0;k<2;k++)
    a[i][j]=(a[i][j]+(f[i][k]*x[k][j])%Mod)%Mod;
    for(int i=0;i<2;i++)
    for(int j=0;j<2;j++)f[i][j]=a[i][j];
}

int pow(int n)
{
    if(n>1)
    {
        pow(n/2);
        if(n%2)
        {
            prod(f);
            prod(u);
        } else
            prod(f);
    }
}

int main()
{
    freopen("kfib.in","r",stdin);
    freopen("kfib.out","w",stdout);
        scanf("%d",&n);
        pow(n+1);
        printf("%d\n",f[0][0]);
  //          for(int i=0;i<2;i++)
 //       {for(int j=0;j<2;j++)printf("%lld ",f[i][j]);printf("\n");}
    return 0;
}