#include <stdio.h>
#define SIZE 5
// 行列の掛け算を行う関数 (R = M1 * M2)
void multiply_matrices(double m1[SIZE][SIZE], double m2[SIZE][SIZE], double r[SIZE][SIZE]) {
// 結果を格納する配列を一度0で初期化
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
r[i][j] = 0;
}
}
// 行列の積の定義に基づいて計算
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
for (int k = 0; k < SIZE; k++) {
r[i][j] += m1[i][k] * m2[k][j];
}
}
}
}
// 行列を表示する関数
void print_matrix(double m[SIZE][SIZE]) {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
// 小数点以下をきれいに揃えて表示
}
}
}
int main() {
// 1. 初期行列 A の定義
double A[SIZE][SIZE] = {
{10, -2, 0, 0, 0},
{-2, 9, -1, 0, 0},
{ 0, -1, 8, -2, 0},
{ 0, 0, -2, 7, -1},
{ 0, 0, 0, -1, 5}
};
double A2[SIZE][SIZE]; // A^2 を格納する配列
double A3[SIZE][SIZE]; // A^3 を格納する配列
// 2. A^2 = A * A を計算
multiply_matrices(A, A, A2);
// 3. A^3 = A^2 * A を計算
multiply_matrices(A2, A, A3);
// 4. 結果の表示
printf("--- 行列 A^2 の結果 ---\n"); print_matrix(A2);
printf("\n--- 行列 A^3 の結果 ---\n"); print_matrix(A3);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgNQoKLy8g6KGM5YiX44Gu5o6b44GR566X44KS6KGM44GG6Zai5pWwIChSID0gTTEgKiBNMikKdm9pZCBtdWx0aXBseV9tYXRyaWNlcyhkb3VibGUgbTFbU0laRV1bU0laRV0sIGRvdWJsZSBtMltTSVpFXVtTSVpFXSwgZG91YmxlIHJbU0laRV1bU0laRV0pIHsKICAgIC8vIOe1kOaenOOCkuagvOe0jeOBmeOCi+mFjeWIl+OCkuS4gOW6pjDjgafliJ3mnJ/ljJYKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0laRTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTSVpFOyBqKyspIHsKICAgICAgICAgICAgcltpXVtqXSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgIC8vIOihjOWIl+OBruepjeOBruWumue+qeOBq+WfuuOBpeOBhOOBpuioiOeulwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IFNJWkU7IGorKykgewogICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IFNJWkU7IGsrKykgewogICAgICAgICAgICAgICAgcltpXVtqXSArPSBtMVtpXVtrXSAqIG0yW2tdW2pdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovLyDooYzliJfjgpLooajnpLrjgZnjgovplqLmlbAKdm9pZCBwcmludF9tYXRyaXgoZG91YmxlIG1bU0laRV1bU0laRV0pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgU0laRTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBTSVpFOyBqKyspIHsKICAgICAgICAgICAgLy8g5bCP5pWw54K55Lul5LiL44KS44GN44KM44GE44Gr5o+D44GI44Gm6KGo56S6CiAgICAgICAgICAgIHByaW50ZigiJTYuMGZcdCIsIG1baV1bal0pOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgLy8gMS4g5Yid5pyf6KGM5YiXIEEg44Gu5a6a576pCiAgICBkb3VibGUgQVtTSVpFXVtTSVpFXSA9IHsKICAgICAgICB7MTAsIC0yLCAgMCwgIDAsICAwfSwKICAgICAgICB7LTIsICA5LCAtMSwgIDAsICAwfSwKICAgICAgICB7IDAsIC0xLCAgOCwgLTIsICAwfSwKICAgICAgICB7IDAsICAwLCAtMiwgIDcsIC0xfSwKICAgICAgICB7IDAsICAwLCAgMCwgLTEsICA1fQogICAgfTsKCiAgICBkb3VibGUgQTJbU0laRV1bU0laRV07IC8vIEFeMiDjgpLmoLzntI3jgZnjgovphY3liJcKICAgIGRvdWJsZSBBM1tTSVpFXVtTSVpFXTsgLy8gQV4zIOOCkuagvOe0jeOBmeOCi+mFjeWIlwoKICAgIC8vIDIuIEFeMiA9IEEgKiBBIOOCkuioiOeulwogICAgbXVsdGlwbHlfbWF0cmljZXMoQSwgQSwgQTIpOwoKICAgIC8vIDMuIEFeMyA9IEFeMiAqIEEg44KS6KiI566XCiAgICBtdWx0aXBseV9tYXRyaWNlcyhBMiwgQSwgQTMpOwoKICAgIC8vIDQuIOe1kOaenOOBruihqOekugogICAgcHJpbnRmKCItLS0g6KGM5YiXIEFeMiDjga7ntZDmnpwgLS0tXG4iKTsKICAgIHByaW50X21hdHJpeChBMik7CgogICAgcHJpbnRmKCJcbi0tLSDooYzliJcgQV4zIOOBrue1kOaenCAtLS1cbiIpOwogICAgcHJpbnRfbWF0cml4KEEzKTsKCiAgICByZXR1cm4gMDsKfQ==