题目:http://poj.org/problem?id=3070
代码:
#include<iostream> #include<algorithm> using namespace std; const int mod=10000; struct matrix { int m[2][2]; }ans,base;//这里用一个结构体数组不知道省了多少代码 //base数组记入的是矩阵的2^x次幂 matrix multi(matrix a,matrix b)//返回的是结构体里的东西我们就要用 结构体来写类型 { matrix tem;//临时写的关于结构体的一个数组 用作中间过渡用 for(int i=0;i<2;i++) for(int j=0;j<2;j++) { tem.m[i][j]=0;// 初始化 for(int k=0;k<2;k++) { tem.m[i][j]=(tem.m[i][j]+a.m[i][k]*b.m[k][j])%mod;//把你算的东西存入tem里 } } return tem;//返回的就是你这一次作乘法的结果 } int fast_mod(int n) { base.m[0][0]=base.m[0][1]=base.m[1][0]=1;//题目里写的矩阵 base.m[1][1]=0; ans.m[0][0]=ans.m[1][1]=1;//这个是一个单位矩阵 ans.m[1][0]=ans.m[0][1]=0; while(n) { if(n&1)//表示n为奇数的情况 { ans=multi(ans,base); } base=multi(base,base); n>>=1;//每次除2 } return ans.m[0][1]; } int main() { long long n; while(scanf("%lld",&n)!=EOF&&n!=-1) { printf("%d\n",fast_mod(n)); } return 0; }