Cod sursa(job #1319881)

Utilizator Miruna_DMiruna Miruna_D Data 17 ianuarie 2015 14:22:26
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <vector>
#define mod 66013
using namespace std;
ifstream fin("kfib.in");
ofstream fout("kfib.out");
int k;
int M[3][3],S[3][3];

void mult(int A[][3], int B[][3])
{
	int C[3][3];
    int i,j,k;
    for(i=0;i<=1;i++)
        for(j=0;j<=1;j++)
            C[i][j]=0

    for(i=0;i<=1;i++)
        for(j=0;j<=1;j++)
            for(k=0;k<=1;k++)
        {
             C[i][j]=C[i][j]+1LL*A[i][k]*B[k][j];
             C[i][j]=C[i][j]%mod;

        }

     for(i=0;i<=1;i++)
        for(j=0;j<=1;j++)
            B[i][j]=C[i][j];

}

void ridicare(int p)
{
    while(p)

    {if(p%2==1)
            mult(M,S);
    mult(S,S);
     p=p/2;
    }

}
int main()
{
    fin>>k;
    M[0][0]=0;
    M[0][1]=1;
    M[1][0]=1;
    M[1][1]=1;
    ridicare(k-1);
    fout<<S[1][1];
    return 1;

}