10分求助
查看原帖
10分求助
1419867
yuanjh1011楼主2024/9/20 18:12
#include<bits/stdc++.h>
using namespace std;
const int N=1e9+7;
int n;
long long k;
struct mat{
	long long a[105][105];
	mat(){
		memset(a,0,sizeof(a));
	}
	void build(){
		for(int i=1;i<=n;i++)
		{
			a[i][i]=1;
		}
	}
}a,ans1;
mat operator *(const mat &x,const mat &y)
{
	mat z;
	for(int k=1;k<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			{
				z.a[i][j]=(z.a[i][j]+x.a[i][k]*y.a[k][j]%N)%N;
			}
		}
	}
	return z;
}

mat fp(int x)
{
    mat ans;ans.build();
	while(x)
	{
		if(x&1)
		{
			ans=ans*a;
		}
		a=a*a;
		x/=2;	
}
	return ans;
}
int main(){
	scanf("%d%lld",&n,&k);
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	scanf("%lld",&a.a[i][j]);
	ans1=fp(k);
	for(int i=1;i<=n;i++)
	{
	for(int j=1;j<=n;j++)
	printf("%lld ",ans1.a[i][j]);
	printf("\n");
    }
	return 0;
}

求助,快速幂放在主函数外就只对最后一个点,放在主函数里就全对

2024/9/20 18:12
加载中...