C语言-求n阶矩阵的N次幂,并输出
时间: 2024-09-15 11:11:11 浏览: 46
在C语言中,求一个n阶矩阵的N次幂可以采用递归或者迭代的方式,特别是当矩阵是对称的或者可以通过分治策略简化计算时。这里我们提供一种常见的矩阵快速幂算法的思路:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义矩阵结构体
typedef struct {
int size;
int matrix[n][n]; // n*n 矩阵
} Matrix;
// 计算矩阵乘法
Matrix multiply(Matrix a, Matrix b) {
Matrix result;
result.size = a.size;
for (int i = 0; i < a.size; ++i) {
for (int j = 0; j < a.size; ++j) {
result.matrix[i][j] = 0;
for (int k = 0; k < a.size; ++k) {
result.matrix[i][j] += a.matrix[i][k] * b.matrix[k][j];
}
}
}
return result;
}
// 矩阵快速幂
Matrix power(Matrix base, int exp) {
if (exp == 1)
return base;
else if (exp % 2 == 0) {
Matrix temp = power(base, exp / 2);
return multiply(temp, temp);
} else {
Matrix temp = power(base, (exp - 1) / 2);
return multiply(multiply(temp, temp), base);
}
}
// 打印矩阵
void printMatrix(Matrix mat) {
for (int i = 0; i < mat.size; ++i) {
for (int j = 0; j < mat.size; ++j) {
printf("%d ", mat.matrix[i][j]);
}
printf("\n");
}
}
int main() {
int n, N;
printf("请输入矩阵的维度(n)和幂(N): ");
scanf("%d %d", &n, &N);
// 初始化一个n阶单位矩阵
Matrix identity = {n, {{1, 0, ...}, {0, 1, ...}, ...}}; // 根据实际n填写其余元素
// 求矩阵N次方
Matrix result = power(identity, N);
// 输出结果矩阵
printf("矩阵 %dx%d 的 %d 次幂为:\n", n, n, N);
printMatrix(result);
return 0;
}
```
阅读全文