Cod sursa(job #1520466)

Utilizator BLz0rDospra Cristian BLz0r Data 8 noiembrie 2015 20:15:22
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <cstdio>
#include <cstring>
using namespace std;

#define Mod 666013

FILE *f = fopen ( "kfib.in", "r" );
FILE *g = fopen ( "kfib.out", "w" );

typedef int Matrix[2][2];

void MultMat ( Matrix &A, Matrix &B, Matrix &C ){

    memset ( C, 0, sizeof ( C ) );

    for ( int i = 0; i <= 1; ++i ){
        for ( int j = 0; j <= 1; ++j ){
            for ( int k = 0; k <= 1; ++k ){
                C[i][j] = ( C[i][j] + 1LL * A[i][k] * B[k][j] ) % Mod;
            }
        }
    }
    memcpy( A, C, sizeof(C) );
}

int aux[2][2], Rez[2][2] = { { 0, 1 } };

void LgPow ( int N ){
    int A[2][2] = { {0, 1},
                    {1, 1} };

    while ( N ){

        if ( N & 1 )
            MultMat(Rez, A, aux);

        N >>= 1;
        MultMat( A, A, aux );
    }
}

int main(){

    int N;

    fscanf ( f, "%d", &N );
    LgPow( N-1 );

    fprintf ( g, "%d", Rez[0][1] );

    return 0;
}