Pagini recente » Cod sursa (job #2789546) | Cod sursa (job #1774864)
#include <cstdio>
using namespace std;
#define MOD 666013
int p[ 2 ][ 2 ] = { { 1, 0 },
{ 0, 1 } };
void ridica ( int n );
void inmultire ( int a[][ 2 ], int b[][ 2 ] );
int main () {
freopen("kfib.in","r",stdin);
freopen("kfib.out","w",stdout);
int n;
scanf("%d",&n);
ridica( n - 1 );
printf("%d",p[ 1 ][ 1 ]);
return 0;
}
void inmultire ( int a[][ 2 ], int b[][ 2 ] ) {
int c[ 2 ][ 2 ] = { { 0, 0 }, { 0, 0 } };
int i, j, k;
for ( i = 0; i < 2; ++i ) {
for ( j = 0; j < 2; ++j ) {
for ( k = 0; k < 2; ++k ) {
c[ i ][ j ] += (long long)(1LL*a[ i ][ k ] * b[ k ][ j ]%MOD);
c[ i ][ j ] %= MOD;
}
}
}
for ( i = 0; i < 2; ++i )
for ( j = 0; j < 2; ++j ) a[ i ][ j ] = c[ i ][ j ] % MOD;
}
void ridica ( int n ) {
int a[ 2 ][ 2 ] = { { 0, 1 },
{ 1, 1 } };
while ( n ) {
if ( n % 2 ) {
inmultire ( p, a );
n--;
}
inmultire ( a, a );
n /= 2;
}
}