分治法求矩阵的幂c语言
时间: 2024-03-29 16:12:24 浏览: 66
分治算法C程序
以下是使用分治法求矩阵幂的C语言代码:
```c
#include <stdio.h>
#define MAX_SIZE 10
void multiply(int a[][MAX_SIZE], int b[][MAX_SIZE], int c[][MAX_SIZE], int n) {
int i, j, k;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
c[i][j] = 0;
for (k = 0; k < n; k++) {
c[i][j] += a[i][k] * b[k][j];
}
}
}
}
void power(int a[][MAX_SIZE], int n, int m, int res[][MAX_SIZE]) {
int i, j;
int tmp[MAX_SIZE][MAX_SIZE];
if (m == 0) {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
res[i][j] = (i == j ? 1 : 0);
}
}
return;
}
power(a, n, m/2, res);
multiply(res, res, tmp, n);
if (m % 2 == 1) {
multiply(tmp, a, res, n);
} else {
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
res[i][j] = tmp[i][j];
}
}
}
}
int main() {
int n, m, i, j;
int a[MAX_SIZE][MAX_SIZE], res[MAX_SIZE][MAX_SIZE];
printf("请输入矩阵大小:");
scanf("%d", &n);
printf("请输入矩阵:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
scanf("%d", &a[i][j]);
}
}
printf("请输入幂的值:");
scanf("%d", &m);
power(a, n, m, res);
printf("矩阵的幂为:\n");
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf("%d ", res[i][j]);
}
printf("\n");
}
return 0;
}
```
代码中的`multiply`函数用于计算两个矩阵的乘积,`power`函数用于计算矩阵的幂,`main`函数用于输入矩阵和幂的值,并输出结果。在`power`函数中,如果幂为0,则返回单位矩阵;否则,递归计算幂的一半,并通过矩阵乘法计算幂值。如果幂为奇数,则需要再乘以原矩阵。
阅读全文