题目链接:https://www.luogu.org/problem/show?pid=3390
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define LL long long using namespace std; const LL mod=1000000007; int n; struct Matrix { LL a[105][105]; inline Matrix operator *(const Matrix &b)const { Matrix ret; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { ret.a[i][j]=0; for(int k=1;k<=n;k++) (ret.a[i][j]+=a[i][k]*b.a[k][j])%=mod; } return ret; } }a; Matrix Matrix_pow(Matrix a,LL b) { Matrix ret=a,k=a; b--; for(;b;b>>=1,k=k*k) if(b&1) ret=ret*k; return ret; } int main() { LL k; scanf("%d%lld",&n,&k); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&a.a[i][j]); a=Matrix_pow(a,k); for (int i=1;i<=n;i++) { for (int j=1;j<n;j++) printf("%d ",a.a[i][j]); printf("%d\n",a.a[i][n]); } return 0; }