矩阵快速幂模板
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
const ll MOD=1e9+7; const int MAXN=60; //矩阵阶数 struct Matrix{ ll m[MAXN][MAXN]; Matrix() { memset(m,0,sizeof(m)); for(int i=0;i<MAXN;i++) m[i][i]=1; } void clear(){ memset(m,0,sizeof(m)); } void show(){ for(int i=0;i<MAXN;i++){ for(int j=0;j<MAXN;j++) cout<<m[i][j]<<" "; cout<<endl; } } }; Matrix mtMul(Matrix A,Matrix B) { int i,j,k,tmp; Matrix C; C.clear(); for(int i=0;i<MAXN;i++) for(int j=0;j<MAXN;j++) for(int k=0;k<MAXN;k++) C.m[i][j]=(C.m[i][j]%MOD+(A.m[i][k]%MOD)*(B.m[k][j]%MOD))%MOD; return C; } Matrix mtPow(Matrix A,int k) { k--; Matrix ans=A; while(k){ if(k&1) ans=mtMul(ans,A); A=mtMul(A,A); k>>=1; } return ans; }