

单位矩阵为:1 0
0 1
最后输出矩阵的 左上角的值就行了!
#include<iostream>
#include<cstdio>
using namespace std;
class matrix
{
public:
int map[2][2];
}ans,cof;
matrix Mul(matrix x1,matrix x2) //矩阵相乘
{
int i,j,k;
matrix c;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
{
c.map[i][j]=0;
for(k=0;k<2;k++)
c.map[i][j]+=(x1.map[i][k]%10000)*(x2.map[k][j]%10000)%10000;
}
return c;
}
int Fibonacci(int n)
{
ans.map[0][0]=1;ans.map[0][1]=0; //初始化
ans.map[1][0]=0;ans.map[1][1]=1;
cof.map[0][0]=1;cof.map[0][1]=1;
cof.map[1][0]=1;cof.map[1][1]=0;
while(n)
{
if(n&1) //快速模幂
ans=Mul(cof,ans);
cof=Mul(cof,cof);
n>>=1;
}
return ans.map[0][1]%10000;
}
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n==-1) break;
printf("%d\n",Fibonacci(n));
}
return 0 ;
}