需要c语言版的矩阵快速幂代码
时间: 2024-10-21 14:14:01 浏览: 57
C语言常用算法源代码.zip
在C语言中,矩阵快速幂算法用于计算斐波那契数列时,可以帮助我们在较短的时间内得到结果。以下是基本的C语言版本的矩阵乘法和矩阵快速幂函数:
```c
#include <stdio.h>
// 定义矩阵结构体
typedef struct {
int a[2][2];
} Matrix;
// 矩阵乘法
Matrix multiply(Matrix A, Matrix B) {
Matrix C;
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
C.a[i][j] = 0;
for (int k = 0; k < 2; k++) {
C.a[i][j] += A.a[i][k] * B.a[k][j];
}
}
}
return C;
}
// 矩阵快速幂
Matrix matrixPow(Matrix A, int n) {
if (n == 1)
return A;
else if (n % 2 == 0) { // 如果n是偶数
Matrix half = matrixPow(A, n / 2);
return multiply(half, half);
} else { // 如果n是奇数
Matrix half = matrixPow(A, (n - 1) / 2);
return multiply(multiply(half, half), A);
}
}
// 获取斐波那契数列的第n项
int fibonacci(int n, int mod) {
if (n <= 0) return 0;
Matrix base = { {1, 1}, {1, 0} };
Matrix result = matrixPow(base, n - 1); // 减一是因为我们要从0开始计数
return result.a[0][0]; // 返回矩阵左上角元素,即斐波那契数
}
int main() {
int n;
scanf("%d", &n);
printf("%d\n", fibonacci(n, 998244353)); // 输入n并计算斐波那契数对998244353取余的结果
return 0;
}
```
这个代码首先定义了一个矩阵结构,然后实现了矩阵乘法和矩阵快速幂的函数。最后,在`main()`函数中读入用户输入的n,计算出第n项的斐波那契数并输出结果。
阅读全文