Code
#include <iostream>
using namespace std;
int ans[2][2];
int mid[2][2];
void init( int a[2][2], int b[2][2], int mark )
{
int i, j, temp[2][2];
temp[0][0] = ( a[0][0] * b[0][0] + a[0][1] * b[1][0] ) % 10000;
temp[0][1] = ( a[0][0] * b[0][1] + a[0][1] * b[1][1] ) % 10000;
temp[1][0] = ( a[1][0] * b[0][0] + a[1][1] * b[1][0] ) % 10000;
temp[1][1] = ( a[1][0] * b[0][1] + a[1][1] * b[1][1] ) % 10000;
if ( mark == 1)
{
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 2; j++ )
{
ans[i][j] = temp[i][j];
}
}
}
if ( mark == 0 )
{
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 2; j++ )
{
mid[i][j] = temp[i][j];
}
}
}
}
void cal ( int n )
{
while ( n )
{
if( n % 2 == 1 )
{
init ( ans, mid, 1 );
}
init ( mid, mid, 0 );
n /= 2;
}
}
int main ()
{
int n;
while ( scanf ( "%d", &n ) && n != -1 )
{
ans[0][0] = 1; ans[0][1] = 0; ans[1][0] = 0; ans[1][1] = 1;
mid[0][0] = 1; mid[0][1] = 1; mid[1][0] = 1; mid[1][1] = 0;
cal (n);
printf ( "%d\n", ans[0][1] );
}
return 0;
}
#include <iostream>
using namespace std;
int ans[2][2];
int mid[2][2];
void init( int a[2][2], int b[2][2], int mark )
{
int i, j, temp[2][2];
temp[0][0] = ( a[0][0] * b[0][0] + a[0][1] * b[1][0] ) % 10000;
temp[0][1] = ( a[0][0] * b[0][1] + a[0][1] * b[1][1] ) % 10000;
temp[1][0] = ( a[1][0] * b[0][0] + a[1][1] * b[1][0] ) % 10000;
temp[1][1] = ( a[1][0] * b[0][1] + a[1][1] * b[1][1] ) % 10000;
if ( mark == 1)
{
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 2; j++ )
{
ans[i][j] = temp[i][j];
}
}
}
if ( mark == 0 )
{
for ( i = 0; i < 2; i++ )
{
for ( j = 0; j < 2; j++ )
{
mid[i][j] = temp[i][j];
}
}
}
}
void cal ( int n )
{
while ( n )
{
if( n % 2 == 1 )
{
init ( ans, mid, 1 );
}
init ( mid, mid, 0 );
n /= 2;
}
}
int main ()
{
int n;
while ( scanf ( "%d", &n ) && n != -1 )
{
ans[0][0] = 1; ans[0][1] = 0; ans[1][0] = 0; ans[1][1] = 1;
mid[0][0] = 1; mid[0][1] = 1; mid[1][0] = 1; mid[1][1] = 0;
cal (n);
printf ( "%d\n", ans[0][1] );
}
return 0;
}