#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() {
//初期行列 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 を格納する配列
//A^2 = A * A を計算
multiply_matrices(A, A, A2);
//A^3 = A^2 * A を計算
multiply_matrices(A2, A, A3);
//結果の表示
printf("--- 行列 A^2 の結果 ---\n"); print_matrix(A2);
printf("\n--- 行列 A^3 の結果 ---\n"); print_matrix(A3);
return 0;}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgU0laRSA1Ci8vIOihjOWIl+OBruaOm+OBkeeul+OCkuihjOOBhumWouaVsCAoUiA9IE0xICogTTIpCnZvaWQgbXVsdGlwbHlfbWF0cmljZXMoZG91YmxlIG0xW1NJWkVdW1NJWkVdLCBkb3VibGUgbTJbU0laRV1bU0laRV0sIGRvdWJsZSByW1NJWkVdW1NJWkVdKSB7Ci8vIOe1kOaenOOCkuagvOe0jeOBmeOCi+mFjeWIl+OCkuS4gOW6pjDjgafliJ3mnJ/ljJYKZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspIHsKZm9yIChpbnQgaiA9IDA7IGogPCBTSVpFOyBqKyspIHsKcltpXVtqXSA9IDA7fX0KLy8g6KGM5YiX44Gu56mN44Gu5a6a576p44Gr5Z+644Gl44GE44Gm6KiI566XCmZvciAoaW50IGkgPSAwOyBpIDwgU0laRTsgaSsrKSB7CmZvciAoaW50IGogPSAwOyBqIDwgU0laRTsgaisrKSB7CmZvciAoaW50IGsgPSAwOyBrIDwgU0laRTsgaysrKSB7CnJbaV1bal0gKz0gbTFbaV1ba10gKiBtMltrXVtqXTsKfX19fQovL+ihjOWIl+OCkuihqOekuuOBmeOCi+mWouaVsAp2b2lkIHByaW50X21hdHJpeChkb3VibGUgbVtTSVpFXVtTSVpFXSkgewpmb3IgKGludCBpID0gMDsgaSA8IFNJWkU7IGkrKykgewpmb3IgKGludCBqID0gMDsgaiA8IFNJWkU7IGorKykgewovL+Wwj+aVsOeCueS7peS4i+OCkuOBjeOCjOOBhOOBq+aPg+OBiOOBpuihqOekugpwcmludGYoIiU2LjBmXHQiLCBtW2ldW2pdKTt9CnByaW50ZigiXG4iKTt9fQppbnQgbWFpbigpIHsKLy/liJ3mnJ/ooYzliJcgQSDjga7lrprnvqkKZG91YmxlIEFbU0laRV1bU0laRV0gPSB7CiAgICAgICAgezEwLCAtMiwgIDAsICAwLCAgMH0sCiAgICAgICAgey0yLCAgOSwgLTEsICAwLCAgMH0sCiAgICAgICAgeyAwLCAtMSwgIDgsIC0yLCAgMH0sCiAgICAgICAgeyAwLCAgMCwgLTIsICA3LCAtMX0sCiAgICAgICAgeyAwLCAgMCwgIDAsIC0xLCAgNX19Owpkb3VibGUgQTJbU0laRV1bU0laRV07IC8vIEFeMiDjgpLmoLzntI3jgZnjgovphY3liJcKZG91YmxlIEEzW1NJWkVdW1NJWkVdOyAvLyBBXjMg44KS5qC857SN44GZ44KL6YWN5YiXCi8vQV4yID0gQSAqIEEg44KS6KiI566XCm11bHRpcGx5X21hdHJpY2VzKEEsIEEsIEEyKTsKLy9BXjMgPSBBXjIgKiBBIOOCkuioiOeulwptdWx0aXBseV9tYXRyaWNlcyhBMiwgQSwgQTMpOwovL+e1kOaenOOBruihqOekugpwcmludGYoIi0tLSDooYzliJcgQV4yIOOBrue1kOaenCAtLS1cbiIpOwpwcmludF9tYXRyaXgoQTIpOwpwcmludGYoIlxuLS0tIOihjOWIlyBBXjMg44Gu57WQ5p6cIC0tLVxuIik7CnByaW50X21hdHJpeChBMyk7CnJldHVybiAwO30=