用C++写一个矩阵快速幂
时间: 2023-03-31 10:00:32 浏览: 159
好的,以下是用 C 语言写一个矩阵快速幂的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100
typedef struct {
int n, m;
int a[MAXN][MAXN];
} Matrix;
Matrix matMul(Matrix A, Matrix B) {
Matrix C;
C.n = A.n, C.m = B.m;
for (int i = ; i < C.n; i++) {
for (int j = ; j < C.m; j++) {
C.a[i][j] = ;
for (int k = ; k < A.m; k++) {
C.a[i][j] += A.a[i][k] * B.a[k][j];
}
}
}
return C;
}
Matrix matPow(Matrix A, int p) {
Matrix ans;
ans.n = ans.m = A.n;
for (int i = ; i < ans.n; i++) {
for (int j = ; j < ans.m; j++) {
ans.a[i][j] = (i == j);
}
}
while (p) {
if (p & 1) ans = matMul(ans, A);
A = matMul(A, A);
p >>= 1;
}
return ans;
}
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
Matrix A;
A.n = A.m = n;
for (int i = ; i < n; i++) {
for (int j = ; j < n; j++) {
scanf("%d", &A.a[i][j]);
}
}
Matrix ans = matPow(A, m);
printf("%d\n", ans.a[k - 1][]);
return ;
}
```
这个程序可以计算一个 n × n 的矩阵 A 的 m 次方,然后输出第 k 行第 1 列的元素。其中,矩阵 A 的元素从标准输入中读入。
阅读全文