#include<cstdio>
#include<cmath>//pow函数,其实没啥用
using namespace std;
int n;long long k;
const int N=pow(10,9)+7;
struct node{long long a[105][105];};
node shu,ans,mp;
//shu是输入的矩阵,ans是所求答案
node matrix(node x,node y){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
mp.a[i][j]=0;
for(int p=1;p<=n;p++)
mp.a[i][j]=(mp.a[i][j]+x.a[i][p] * y.a[p][j])%N;
//矩阵乘法
}
return mp;
}
int work(long long k){//矩阵快速幂
while(k){
if(k&1)
ans=matrix(ans,shu);
k>>=1;
shu=matrix(shu,shu);
}
}
int main(){
scanf("%d%lld",&n,&k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
scanf("%d",&shu.a[i][j]);
ans.a[i][i]=1;//任何一个矩阵乘以单位矩阵,其值等于本身;
}
work(k);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
printf("%d ",ans.a[i][j]);
printf("\n");
}
return 0;
}
矩阵快速幂 模板
猜你喜欢
转载自blog.csdn.net/MallowFlower/article/details/81507145
今日推荐
周排行