Cod sursa(job #1159118)

Utilizator florin.ilieFlorin Ilie florin.ilie Data 29 martie 2014 12:45:08
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

#define MOD 666013

int p;
int mat[3][3] ={{ 0, 1},{ 1, 1}};
int sol[3][3] ={{ 1, 0},{ 0, 1}};
int aux[3][3];

void inmultire (int A[][3], int B[][3])
{
    for(int i=0;i<2;i++)
        for(int j=0;j<2;j++)
            for(int k=0;k<2;k++)
                aux[i][j]= (aux[i][j] + 1LL * A[i][k] * B[k][j])%MOD;
}

int main()
{
    ifstream fin("kfib.in");
    ofstream fout("kfib.out");
    fin>>p;
    p--;
    for(int k=0;1<<k<=p;k++){
        if((1<<k)&p){
            memset(aux,0,sizeof(aux));
            inmultire(mat,sol);
            memcpy(sol,aux,sizeof(aux));
        }
        memset(aux,0,sizeof(aux));
        inmultire(mat,mat);
        memcpy(mat,aux,sizeof(aux));
    }
    fout<<sol[1][1]<<'\n';
    return 0;
}