poj 3070 快速幂 矩阵相乘
矩阵相乘模板
#include <cstdio> #include <cstring> # define ld __int64 struct Matrix{ ld a[2][2]; void init() { a[0][0]=a[1][0]=a[0][1]=1; a[1][1]=0; } }; Matrix matrix_mul(Matrix a,Matrix b) { int i,j,k; Matrix ans; for(i=0;i<2;i++) { for(j=0;j<2;j++) { ans.a[i][j]=0; for(k=0;k<2;k++) ans.a[i][j]+=a.a[i][k]*b.a[k][j]; ans.a[i][j]%=10000; } } return ans; } Matrix mult(Matrix a,ld b) { Matrix ans; ans.init(); while(b) { if(b&1) ans=matrix_mul(ans,a); b>>=1; a=matrix_mul(a,a); } return ans; } int main() { int n ; while(scanf("%I64d",&n),n!=-1) { Matrix ans,tmp; tmp.init(); ans=mult(tmp,n); printf("%I64d\n",ans.a[1][1]%10000); } return 0; }