#include<bits/stdc++.h>
using namespace std;
int n;
long long k;
const long long mod=1e9+7;
struct node
{
long long m[110][110];
};
node operator *(const node &a,const node &b)
{
node c;
memset(c.m,0,sizeof(c.m));
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
c.m[i][j]=(c.m[i][j]+a.m[i][k]*b.m[k][j])%mod;
}
}
}
return c;
}
node fastm(node a,long long t)
{
node ans;
memset(ans.m,0,sizeof(ans.m));
for(int i=1;i<=n;i++) ans.m[i][i]=1;
while(t)
{
if(t&1) ans=ans*a;
a=a*a;
t>>=1;
}
return ans;
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(false);
cin>>n>>k;
node a;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a.m[i][j];
}
}
node x=fastm(a,k);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cout<<x.m[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
矩阵快速幂(模板)
最新推荐文章于 2024-07-18 16:38:50 发布