矩阵基本算法
#include<cstdio> using namespace std; int n; struct matrix { int m[15][15]; }ans,base; matrix multi( matrix a,matrix b )//矩阵乘法 { matrix temp; for(int i=0;i<n;i++)//n阶矩阵 { for(int j=0;j<n;j++) { temp.m[i][j]=0; for(int k=0;k<n;k++) temp.m[i][j]=(temp.m[i][j]+a.m[i][k]*b.m[k][j])%9973; } } return temp; } matrix fast(matrix a, int k)//矩阵a的k次幂 { for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(i==j)ans.m[i][j]=1; else ans.m[i][j]=0; } while(k) { if(k&1) { ans=multi(ans,a); } a=multi(a,a); k>>=1; } return ans; } int main() { int cas; scanf("%d",&cas); while(cas--) { int k; scanf("%d%d",&n,&k); for(int i=0;i<n;i++) for(int j=0;j<n;j++) scanf("%d",&base.m[i][j]); matrix temp=fast(base, k); int sum=0; for(int i=0;i<n;i++) sum=(sum+temp.m[i][i])%9973; printf("%d ",sum); } return 0; }