矩阵快速幂

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
constexpr int maxn=110,p=1e9+7;
long long n,k;
long long a[maxn][maxn],c[maxn][maxn],ans[maxn][maxn];
void multi_matrix(long long a[][maxn],long long b[][maxn])
{
	for (long long i=1;i<=n;i++)
	{
		for (long long j=1;j<=n;j++)
		{
			for (long long k=1;k<=n;k++) c[i][j]=(c[i][j]+(a[i][k]*b[k][j])%p)%p;
		}
	}
	memcpy(a,c,sizeof(c));memset(c,0,sizeof(c));
}
void ksm()
{
	while (k)
	{
		if (k&1) multi_matrix(ans,a);
		multi_matrix(a,a);
		k>>=1; 
	}
}
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin >> n >> k;
	for (long long i=1;i<=n;i++)
	{
		for (long long j=1;j<=n;j++) cin >> a[i][j],a[i][j]%=p;
		ans[i][i]=1;
	}
	ksm();
	for (long long i=1;i<=n;i++)
	{
		for (long long j=1;j<=n;j++) cout << ans[i][j] << " ";
		cout << endl;
	}
    return 0;
}
posted @ 2026-06-04 21:53  msjing  阅读(5)  评论(0)    收藏  举报