用c语言写出利用快速幂进行矩阵乘法运算的c语言程序
时间: 2023-09-27 11:03:55 浏览: 101
以下是利用快速幂进行矩阵乘法运算的C语言程序:
```c
#include <stdio.h>
#define MAX_SIZE 50
void matrix_multiply(int a[][MAX_SIZE], int b[][MAX_SIZE], int c[][MAX_SIZE], int n);
void matrix_power(int a[][MAX_SIZE], int b[][MAX_SIZE], int n, int k);
int main() {
int a[MAX_SIZE][MAX_SIZE], b[MAX_SIZE][MAX_SIZE], c[MAX_SIZE][MAX_SIZE];
int n, k, i, j;
printf("Enter the size of matrix: ");
scanf("%d", &n);
printf("Enter the elements of matrix A:\n");
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
scanf("%d", &a[i][j]);
}
}
printf("Enter the elements of matrix B:\n");
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
scanf("%d", &b[i][j]);
}
}
printf("Enter the power of matrix B: ");
scanf("%d", &k);
matrix_power(a, b, n, k);
matrix_multiply(a, b, c, n);
printf("A^%d:\n", k);
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
printf("A*B:\n");
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
printf("%d ", c[i][j]);
}
printf("\n");
}
return 0;
}
void matrix_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 matrix_power(int a[][MAX_SIZE], int b[][MAX_SIZE], int n, int k) {
int i, j, l;
int temp[MAX_SIZE][MAX_SIZE];
for(i=0; i<n; i++) {
for(j=0; j<n; j++) {
temp[i][j] = a[i][j];
}
}
for(i=1; i<k; i++) {
matrix_multiply(temp, b, a, n);
for(l=0; l<n; l++) {
for(j=0; j<n; j++) {
temp[l][j] = a[l][j];
}
}
}
}
```
该程序首先从标准输入中读取矩阵A和矩阵B的元素及其大小,并读取矩阵B的幂k。然后,它调用matrix_power函数使用快速幂算法来计算矩阵B的幂,并将结果存储在矩阵A中。接下来,它调用matrix_multiply函数来计算矩阵A和矩阵B的乘积,并将结果存储在矩阵C中。最后,它将矩阵A和矩阵C打印到标准输出中。
阅读全文