重载乘法,没有初始化也放过去了 可知数据有多水了
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const ll mod=1e9+7;
const ll N =1e2+5;
ll n,k;
struct M{
ll m[N][N];
};
M operator*(const M&A,const M&B){
M C;//这边没有初始化
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
C.m[i][j]=(C.m[i][j]+A.m[i][k]*B.m[k][j]%mod)%mod;
return C;
}
M aaa,_1;
void init(){for(int i=1;i<=n;i++)_1.m[i][i]=1;}
M fp(M a,ll b){
if(b==0) return _1;
M res=fp(a,b/2);
if(b%2==0) return res*res;
return res*res*a;
}
int main(){
cin>>n>>k;
init();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>aaa.m[i][j];
aaa=fp(aaa,k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
cout<<aaa.m[i][j]<<" ";
cout<<"\n";
}
return 0;
}