#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MOD = 1e9 + 7;
struct matrix {
int a[105][105];
}pre,res;
int n, k;
matrix mul(matrix A, matrix B) {
matrix temp;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
temp.a[i][j] = 0;
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
temp.a[i][j] += (A.a[i][k] % MOD) * (B.a[k][j] % MOD) % MOD;
temp.a[i][j] %= MOD;
}
}
}
return temp;
}
void qpow() {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (i == j) res.a[i][j] = 1;
}
}
while (k) {
if (k & 1) res = mul(res, pre);
pre = mul(pre, pre);
k >>= 1;
}
}
signed main() {
cin >> n >> k;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> pre.a[i][j];
}
}
qpow();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (j == 1) cout << res.a[i][j];
else cout << " " << res.a[i][j];
}
cout << endl;
}
return 0;
}
【例题记录】矩阵快速幂
最新推荐文章于 2024-07-21 21:42:06 发布