写一下矩阵快速幂的代码用c++
时间: 2024-05-13 09:13:46 浏览: 107
好的,以下是矩阵快速幂的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义矩阵大小
#define MAXN 100
// 矩阵乘法
void matrix_mul(int a[][MAXN], int b[][MAXN], int c[][MAXN], int n, int m, int k)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
c[i][j] = 0;
for (int p = 0; p < m; p++) {
c[i][j] += a[i][p] * b[p][j];
}
}
}
}
// 矩阵快速幂
void matrix_pow(int a[][MAXN], int n, int m, int k, int p, int ans[][MAXN])
{
int tmp[MAXN][MAXN];
// 初始化 ans 为单位矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
ans[i][j] = i == j ? 1 : 0;
}
}
while (p) {
if (p & 1) {
matrix_mul(ans, a, tmp, n, k, m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
ans[i][j] = tmp[i][j];
}
}
}
matrix_mul(a, a, tmp, n, m, m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
a[i][j] = tmp[i][j];
}
}
p >>= 1;
}
}
int main()
{
// 示例矩阵
int a[MAXN][MAXN] = {
{1, 2},
{3, 4}
};
int n = 2, m = 2, k = 2;
int p = 3;
int ans[MAXN][MAXN];
// 矩阵快速幂计算 a^p
matrix_pow(a, n, m, k, p, ans);
// 输出结果
for (int i = 0; i < n; i++) {
for (int j = 0; j < k; j++) {
printf("%d ", ans[i][j]);
}
printf("\n");
}
return 0;
}
```
现在,你可以问我第二个问题了。
阅读全文