Author: zyy
Date: 20250709
tag: 矩阵乘法
link: https://www.luogu.com.cn/problem/P3390题目描述
分析
矩阵乘法具有结合律,因此矩阵可以进行快速幂
代码实现
cpp
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
const int Mod = 1e9 + 7;
typedef long long LL;
LL n, k;
LL a[N][N], ans[N][N];
inline void mul(LL a[N][N], LL b[N][N]) {
LL c[N][N] = {0};// k > 1 c数组一定要清空
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
for (int k = 1; k <= n; k++)
c[i][j] = (c[i][j] + a[i][k] * b[k][j]) % Mod;
memcpy(a, c, sizeof c);
}
inline void qmi(LL k) {
// 初始化ans为单位矩阵
for (int i = 1; i <= n; i++)
ans[i][i] = 1;
while (k) {
if (k & 1) mul(ans, a);
mul(a, a);
k >>= 1;
}
}
int main() {
cin >> n >> k;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> a[i][j];
qmi(k);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++)
cout << ans[i][j] << " ";
cout << endl;
}
return 0;
}