提交时间:2026-06-17 20:53:36

运行 ID: 91874

#include <iostream> #include <vector> using namespace std; // 定义最大阶数 const int MAX_N = 35; // 矩阵结构体,方便操作 struct Matrix { long long data[MAX_N][MAX_N]; int n; // 阶数 // 构造函数,初始化为零矩阵 Matrix(int size) : n(size) { for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) data[i][j] = 0; } // 设置为单位矩阵 void setIdentity() { for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) data[i][j] = (i == j) ? 1 : 0; } // 矩阵乘法: this = this * other Matrix multiply(const Matrix& other) const { Matrix result(n); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { long long sum = 0; for (int k = 0; k < n; ++k) { sum += data[i][k] * other.data[k][j]; } result.data[i][j] = sum; } } return result; } // 打印矩阵 void print() const { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (j > 0) cout << " "; cout << data[i][j]; } cout << endl; } } }; int main() { // 优化IO ios::sync_with_stdio(false); cin.tie(NULL); int N, M; if (!(cin >> N >> M)) return 0; Matrix A(N); // 读取矩阵 A for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { cin >> A.data[i][j]; } } // 初始化结果矩阵为单位矩阵 Matrix res(N); res.setIdentity(); // 计算 A 的 M 次幂 // 逻辑:res 初始为 I (单位矩阵) // 循环 M 次: res = res * A // M=0: 循环0次, res 保持为 I (正确) // M=1: 循环1次, res = I * A = A (正确) // M=2: 循环2次, res = (I * A) * A = A^2 (正确) for (int i = 0; i < M; ++i) { res = res.multiply(A); } // 输出结果 res.print(); return 0; }