题目链接: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;
}