矩阵快速幂
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,k,m=1e9 + 7,c[1010][1010],a[1010][1010],a1[1010][1010],x[1010][1010];
void first(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
x[i][j]=a1[i][j],a1[i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
a1[i][j]=(a1[i][j]+(a[i][k]*x[k][j])%m)%m;
return ;
}
void second(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
x[i][j]=a[i][j],a[i][j]=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=n;k++)
a[i][j]=(a[i][j]+(x[i][k]*x[k][j])%m)%m;
return ;
}
int ksm(int k){
while(k){
if(k%2==1) first();
k/=2;
second();
}
return 0;
}
signed main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
a1[i][i] = 1;
ksm(k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)cout<<a1[i][j]<<" ";
cout<<endl;
}
return 0;
}
本文来自博客园,作者:Arthur_Douglas,转载请注明原文链接:https://www.cnblogs.com/wenzhihao2023/p/17986656