社区讨论

矩阵快速幂求调悬关

学术版参与者 4已保存回复 7

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
7 条
当前快照
1 份
快照标识符
@mihk8smy
此快照首次捕获于
2025/11/27 23:00
3 个月前
此快照最后确认于
2025/11/29 10:30
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
int n,k;
struct mat{
	int size,s[110][110];
	mat operator *(mat m){
		mat mm={size};
		for(int i=1;i<=size;i++)
			for(int j=1;j<=size;j++)
				for(int k=1;k<=size;mm.s[i][j]+=s[i][k]*m.s[k][j]%mod,s[i][j]%=mod,k++);
		return mm;
	}
}e,mt,ans;
mat ppow(mat a,int b){
	if(!b)
		return e;
	if(b==1)
		return a;
	if(b==2)
		return a*a;
	mat mid=ppow(a,b>>1);
	if(b&1)
		return mid*mid*a;
	return mid*mid;
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;e.s[i][i]=1,i++);
	e.size=mt.size=n;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;cin>>mt.s[i][j],j++);
	ans=ppow(mt,k);
	for(int i=1;i<=n;cout<<'\n',i++)
		for(int j=1;j<=n;cout<<ans.s[i][j]<<' ',j++);
	return 0;
}

回复

7 条回复,欢迎继续交流。

正在加载回复...