C语言斐波那契数列除以10007余数
时间: 2023-11-25 20:51:23 浏览: 144
以下是C语言实现斐波那契数列除以10007余数的代码:
```c
#include <stdio.h>
int main() {
int i = 1, j = 1, n;
scanf("%d", &n);
if (n == 1 || n == 2) {
printf("1");
return 0;
}
int sum = 0;
for (int t = 3; t <= n; ++t) {
sum = (i + j) % 10007;
i = j % 10007;
j = sum % 10007;
}
printf("%d", sum);
return 0;
}
```
这段代码通过循环计算斐波那契数列的每一项,并在计算过程中对10007取余,最终得到斐波那契数列除以10007的余数。
相关问题
c语言斐波那契数列第n项对998244353求模
在C语言中,计算斐波那契数列第n项对于998244353这个素数取余操作通常可以使用矩阵快速幂算法,这种方法比直接递归或者迭代更有效率。矩阵快速幂的基本思想是利用指数运算的性质,通过分治策略将大指数问题转化为小指数问题。
以下是使用C语言实现的一个简化版的矩阵快速幂函数以及计算斐波那契数列第n项对998244353取模的方法:
```c
#include <stdio.h>
#define MOD 998244353
// 定义矩阵乘法函数
void multiply(int F[2][2], int M[2][2]) {
int x = (F[0][0] * M[0][0] + F[0][1] * M[1][0]) % MOD;
int y = (F[0][0] * M[0][1] + F[0][1] * M[1][1]) % MOD;
int z = (F[1][0] * M[0][0] + F[1][1] * M[1][0]) % MOD;
int w = (F[1][0] * M[0][1] + F[1][1] * M[1][1]) % MOD;
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
// 计算矩阵的快速幂
void matrixPow(int F[2][2], int n) {
if (n == 1)
return;
matrixPow(F, n / 2);
multiply(F, F);
if (n % 2 != 0)
multiply(F, initialMatrix);
}
// 初始化初始矩阵,用于生成斐波那契序列
int initialMatrix[2][2]={{1,1},{1,0}};
int fibonacciMod(int n) {
int F[2][2] = {{1, 1}, {1, 0}};
matrixPow(F, n - 1); // 因为我们要的是第n项,所以减去1
return F[0][0];
}
int main() {
int n;
printf("请输入n: ");
scanf("%d", &n);
printf("斐波那契数列第%d项对998244353取模的结果是: %d\n", n, fibonacciMod(n));
return 0;
}
```
在这个代码中,`fibonacciMod`函数首先初始化了一个表示斐波那契数列生成矩阵的2x2数组,然后通过矩阵快速幂来计算其n次方,得到的就是第n项除以998244353的余数。
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 输入格式 输入包含一个整数n。 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 用C语言写出来
我可以回答这个问题。以下是C语言代码:
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int f1 = 1, f2 = 1, fn;
for (int i = 3; i <= n; i++) {
fn = (f1 + f2) % 10007;
f1 = f2;
f2 = fn;
}
printf("%d\n", fn);
return ;
}
这个程序可以计算Fibonacci数列中第n项除以10007的余数。
阅读全文