快速幂参考的百度文库的一个文章,写的很详细
http://wenku.baidu.com/view/2384ecc02cc58bd63186bdf6.html
#include<cstdio> #include<cstring> void Mul(int a[2][2],int b[2][2],int c[2][2]) { int i,j,k,sum; for(i=0;i<2;i++) for(j=0;j<2;j++) { sum=0; for(k=0;k<2;k++) sum+=(a[i][k]*b[k][j])%10000; c[i][j]=sum%10000; } } void Pow(int a[2][2],int n) { if(n==1) return ; int b[2][2],c[2][2]; memcpy(b,a,sizeof(b)); Pow(b,n/2); if(n%2) { Mul(b,a,c); Mul(c,b,a); } else Mul(b,b,a); } int main() { int n; while(scanf("%d",&n)!=EOF && n>=0 ) { int a[2][2]={ {1,1},{1,0} }; if(n==0) printf("0\n"); else { Pow(a,n); printf("%d\n",a[0][1]); } } return 0; }