Cod sursa(job #1092909)

Utilizator addy01adrian dumitrache addy01 Data 27 ianuarie 2014 15:38:10
Problema Al k-lea termen Fibonacci Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#define mod 666013
using namespace std;

ifstream in("kfib.in");
ofstream out("kfib.out");
int k;


inline void mult(int a[3][3], int b[3][3])
{
    int c[3][3];
    c[1][1]=a[1][1]*b[1][1]+a[1][2]*b[2][1];
    c[1][2]=a[1][1]*b[1][2]+a[1][2]*b[2][2];
    c[2][1]=a[2][1]*b[1][1]+a[2][2]*b[2][1];
    c[2][2]=a[2][1]*b[1][2]+a[2][2]*b[2][2];

    a[1][1]=c[1][1];
    a[1][2]=c[1][2];
    a[2][1]=c[2][1];
    a[2][2]=c[2][2];
}

int mat[3][3],sol[3][3];


inline int lgpow (int A[3][3], int P)
{
    sol[1][1] = 1;
    sol[1][2] = 0;
    sol[2][1] = 0;
    sol[2][2] = 1;

    for ( ; P; P >>= 1){
        if (P & 1)
            mult (sol, A);

        mult (A, A);
    }

    return sol[1][2] % mod;
}

int main()
{
    in>>k;
  mat[1][1]=0;
  mat[1][2]=1;
  mat[2][1]=1;
  mat[2][2]=1;

if(k<3)
{
    out<<1;
    return 0;
}

out<<lgpow(mat,k);



    return 0;
}