Pagini recente » Cod sursa (job #78684) | Cod sursa (job #2071542) | Cod sursa (job #1335799) | Cod sursa (job #780253) | Cod sursa (job #409887)
Cod sursa(job #409887)
#include <algorithm>
using namespace std;
#define MOD 666013
typedef int int_32;
typedef long long int int_64;
int_32 AUX[ 2 ][ 2 ] = { { 0, 1 },
{ 1, 1 } };
int_32 SOL[ 2 ][ 2 ] = { { 1, 0 },
{ 0, 1 } };
int_32 K, M[ 2 ][ 2 ];
void mult( int_32 A[ 2 ][ 2 ], int_32 B[ 2 ][ 2 ] ) {
// int_32 i, j, k;
M[ 0 ][ 0 ] = ( (int_64)A[ 0 ][ 0 ] * B[ 0 ][ 0 ] + (int_64)A[ 0 ][ 1 ] * B[ 1 ][ 0 ] ) % MOD;
M[ 0 ][ 1 ] = ( (int_64)A[ 0 ][ 0 ] * B[ 0 ][ 1 ] + (int_64)A[ 0 ][ 1 ] * B[ 1 ][ 1 ] ) % MOD;
M[ 1 ][ 0 ] = ( (int_64)A[ 1 ][ 0 ] * B[ 0 ][ 0 ] + (int_64)A[ 1 ][ 1 ] * B[ 1 ][ 0 ] ) % MOD;
M[ 1 ][ 1 ] = ( (int_64)A[ 1 ][ 0 ] * B[ 0 ][ 1 ] + (int_64)A[ 1 ][ 1 ] * B[ 1 ][ 1 ] ) % MOD;
// memset( M, 0, sizeof( M ) );
// for( i = 0; i < 2; ++i )
// for( j = 0; j < 2; ++j )
// for( k = 0; k < 2; ++k )
// M[ i ][ j ] = ( M[ i ][ j ] + A[ i ][ k ] * B[ k ][ j ] ) % MOD;
memcpy( A, M, sizeof( M ) );
}
void get_pow( int_32 AUX[ 2 ][ 2 ], int_32 exp ) {
int_32 i;
for( i = 1; i <= exp; i <<= 1 ) {
if( i & exp )
mult( SOL, AUX );
mult( AUX, AUX );
}
}
int main() {
freopen( "kfib.in", "r", stdin );
freopen( "kfib.out", "w", stdout );
scanf( "%d", &K );
get_pow( AUX, K-1 );
// printf( "%d %d\n", SOL[ 0 ][ 0 ], SOL[ 0 ][ 1 ] );
// printf( "%d %d\n", SOL[ 1 ][ 0 ], SOL[ 1 ][ 1 ] );
printf( "%d", ( SOL[ 0 ][ 0 ] + SOL[ 1 ][ 0 ] ) % MOD );
return 0;
}