用c语言编写已知斐波那契数列 F n =F n−1 +F n−2 (n>=3),F 1 =1,F 2 =1 求解该数列的第n项,结果对998244353取模。 提示:矩阵快速幂,unsigned long long的最大值:1844674407370955161(1.8e18)
时间: 2023-06-24 21:08:05 浏览: 176
矩阵快速幂是求解斐波那契数列的一个高效算法,时间复杂度为O(logn)。下面是用C语言实现的代码:
```c
#include <stdio.h>
#define MOD 998244353
typedef unsigned long long ull;
//定义矩阵结构体
typedef struct matrix {
ull a[2][2];
} matrix;
//矩阵乘法
matrix multiply(matrix x, matrix y) {
matrix z = {0};
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
z.a[i][j] += x.a[i][k] * y.a[k][j] % MOD;
z.a[i][j] %= MOD;
}
}
}
return z;
}
//矩阵快速幂
matrix matrix_pow(matrix x, int n) {
matrix res = {1, 0, 0, 1};
while (n) {
if (n & 1) {
res = multiply(res, x);
}
x = multiply(x, x);
n >>= 1;
}
return res;
}
//求解斐波那契数列第n项
ull fibonacci(int n) {
if (n <= 2) {
return 1;
}
matrix base = {1, 1, 1, 0};
matrix res = matrix_pow(base, n - 2);
return res.a[0][0] % MOD;
}
int main() {
int n;
printf("Enter the value of n: ");
scanf("%d", &n);
printf("The %dth Fibonacci number is %llu\n", n, fibonacci(n));
return 0;
}
```
该程序需要用户输入n的值,然后输出斐波那契数列的第n项。
阅读全文