赤裸裸的模板题,具体思路就看代码吧!
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define mod 10000
struct matrix
{
__int64 a[2][2];
void init()
{
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
a[i][j]=1;
}
}
a[1][1]=0;
}
};
matrix matrix_mul1(matrix tmp1,matrix tmp2)
{
matrix ans;
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
ans.a[i][j]=0;
for(int k=0;k<2;k++)
{
(ans.a[i][j]+=tmp1.a[i][k]*tmp2.a[j][k])%=mod; //这里表示的是矩阵相乘
}
}
}
return ans;
}
matrix matrix_mul2(matrix tmp,__int64 n)
{
matrix ans;
ans.init();
while(n)
{
if(n&1)ans=matrix_mul1(ans,tmp); //当n为奇数时,乘上当前的tmp
tmp=matrix_mul1(tmp,tmp);
n>>=1;
}
return ans;
}
int main()
{
__int64 n;
while(scanf("%I64d",&n)&&n!=-1)
{
matrix tmp;
tmp.init();
tmp=matrix_mul2(tmp,n);
printf("%d\n",tmp.a[1][1]);
}
return 0;
}