Cod sursa(job #589578)

Utilizator thesilverhand13FII Florea Toma Eduard thesilverhand13 Data 12 mai 2011 20:29:58
Problema Al k-lea termen Fibonacci Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
# include <fstream>
# define mod 666013 

using namespace std;

ifstream f("kfib.in");
ofstream g("kfib.out");

 

int Z[2][2], M[2][2] ;
int N ;

inline void mult ( int A[2][2], int B[2][2] )
{
    int C[2][2] ;
    for ( int i = 0; i < 2; ++i )
	{
        for ( int j = 0; j < 2; ++j ) 
		{
            C[i][j] = 0 ;
            for ( int k = 0; k < 2; ++k ) 
			{
                C[i][j] += 1LL * A[i][k] * B[k][j] % mod ;
                if ( C[i][j] >= mod ) 
					C[i][j] -= mod ;
            }
        }
    }

    for ( int i = 0; i < 2; ++i ) {
        for ( int j = 0; j < 2; ++j ) {
            A[i][j] = C[i][j] ;
        }
    }
}

inline void powr ( int P, int M[2][2] ) {
    M[0][0] = M[1][1] = 1 ;

    for ( ; P ; P >>= 1 ) {
        if ( P & 1 ) {
            mult ( M, Z ) ;
        }

        mult ( Z, Z ) ;
    }
}

int main ( void ) {
    //fscanf ( fopen ( FIN, "r" ) , "%d", &N ) ;
	f>>N;

    Z[0][0] = 0, Z[0][1] = 1 ;
    Z[1][0] = 1, Z[1][1] = 1 ;

    powr ( N - 1, M ) ;

    //fprintf ( fopen ( FOU, "w" ) , "%d", M[1][1] ) ;
	g<<M[1][1];
}