Cod sursa(job #1581860)

Utilizator superstar1998Moldoveanu Vlad superstar1998 Data 27 ianuarie 2016 11:15:59
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <cstring>
#define mod 666013
using namespace std;
int n,mat[2][2],sol[2][2];
ifstream f("kfib.in");
ofstream g("kfib.out");
void mult(int a[][2], int b[][2])
{
    int i,j,k;
    int c[2][2];
    memset(c,0,sizeof(c));
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
            for(k=0;k<2;k++)
                c[i][j]=(c[i][j]+1LL*a[i][k]*b[k][j])%mod;
    for(i=0;i<2;i++)
        for(j=0;j<2;j++)
            a[i][j]=c[i][j];
}
int main()
{
    f>>n;
    mat[1][1]=mat[1][0]=mat[0][1]=1;
    sol[1][1]=sol[0][0]=1;
    n--;
    while(n)
    {
        if(n%2)
        {
            mult(sol,mat);
            n--;
        }
        mult(mat,mat);
        n=n/2;
    }
    g<<sol[1][1];
    return 0;
}