玄关,10pts求助
查看原帖
玄关,10pts求助
421719
zxyu112楼主2024/12/17 14:18
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int mod=1e9+7;
int a[110][110];
int ans[110][110];
int n;
void matrix_mult2(){
	int b[110][110]={0};
	for(int p=1;p<=n;p++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				b[i][j]=(b[i][j]+ans[i][p]*a[p][j])%mod;
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			ans[i][j]=b[i][j];
		}
	}
}
void matrix_mult1(){
	int b[110][110]={0};
	for(int p=1;p<=n;p++)
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
				b[i][j]=(b[i][j]+a[i][p]*a[p][j])%mod;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=b[i][j];
		}
	}
}
/*void matrix_quick_pow(int x){
	while(x){
		if(x&1)matrix_mult2();//ans*=a
		matrix_mult1();//a*=a
		x>>=1;
	}
}*/
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,k;
	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++){
		ans[i][i]=1;
	}
	//matrix_quick_pow(k);
	while(k){
		if(k&1)matrix_mult2();//ans*=a
		matrix_mult1();//a*=a
		k>>=1;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<ans[i][j]%mod<<' ';
		}
		cout<<"\n";
	}
	return 0;
}
2024/12/17 14:18
加载中...