//矩阵快速幂: struct matrix { int n,m; int z[233][233]; matrix() { n=m=0; memset(z,0,sizeof(z)); } }; matrix operator*(const matrix &a,const matrix &b) { matrix c; c.n=a.n; c.m=b.m; for(int i=1;i<=c.n;i++) for(int j=1;j<=c.m;j++) for(int k=1;k<=a.m;k++) c.z[i][j]=c.z[i][j]+a.z[i][k]*b.z[k][j]; return c; } matrix ksm(matrix x,int y) { if(y==0) { matrix z; z.n=z.m=x.n; for(int a=1;a<=z;a++) z.z[a][a]=1; return z; } matrix z=ksm(x,y>>1); z=z*z; if(y%2==1) z=z*x; return z; }
原文:https://www.cnblogs.com/liumengliang/p/12535181.html