斐波那契数列求余(蓝桥)

问题描述

Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。

当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。

输入格式

输入包含一个整数n。

输出格式

输出一行,包含一个整数,表示Fn除以10007的余数。

说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。

样例输入

10

样例输出

55

样例输入

22

样例输出

7704

数据规模与约定

1 <= n <= 1,000,000。

#include <stdlib.h>

#include <stdio.h>

#define MOD 10007

#define MAXN 1000001

int n, i, F[MAXN];

int main()

{

scanf("%d", &n);

F[1] = 1;

F[2] = 1;

for (i = 3; i <= n; ++i)

F[i] = (F[i-1] + F[i-2]) % MOD;

printf("%d\n", F[n]);

return 0;

}

时间: 2024-08-13 02:17:56

斐波那契数列求余(蓝桥)的相关文章

斐波拉契数列求第N个;

递归写法: function fblq(a){ if(a == 1 || a == 2){ return 1; }else{ return fblq(a -1) + fblq(a -2); } } alert(fblq(6)); 非递归: function fibonacci(n){ var a,b,res; a = b = 1; for(var i=3;i<=n;i++){ res = a + b; a = b; b = res; } return res; } alert(fibonacci

JavaScript 斐波那契数列 倒序输出 输出100以内的质数

|--斐波那契数列 1 //求斐波那契数列第n位 2 var n = parseInt(window.prompt('输入你要求的斐波那契数列的位数')); 3 var first = 1, 4 second = 1, 5 third; 6 if (n > 2) { 7 for (var i = 0; i < n - 2; i++) { 8 third = first + second; 9 first = second; 10 second = third; 11 document.writ

斐波那契数列的记忆搜索

目录 摘要 斐波那契数列 经典递归分析 动态规划分析 摘要 本blog通过"斐波那契数列求值"这个经典问题,分析并说明"从单一递归到记忆搜索"这个思想过程.本blog是整个动态规划学习的一部分.(记忆搜索是动态规划的递归写法) 斐波那契数列 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:

快速求斐波那契数列(矩阵乘法+快速幂)

斐波那契数列 给你一个n:f(n)=f(n-1)+f(n-2) 请求出 f(f(n)),由于结果很大请 对答案 mod 10^9+7; 1<=n<=10^100; 用矩阵乘法+快速幂求斐波那契数列是经典应用: 矩阵公式 C i j=C i k *C k j; 根据递推式 构造2*2矩阵: 原始矩阵 1 0 0 1 矩阵 2 1 1 1 0 原始矩阵与矩阵 2相乘达到转化状态效果: 对矩阵二进行快速幂 乘法:达到快速转化矩阵的效果: 即使达到快速转化状态:那么大的数据范围也很难求解: 高精?这有

ACM_无聊者序列(斐波那契数列大数+同余+规律)

Problem Description: 瓜瓜在玩着由红色和蓝色的大理石做成的玻璃珠,他将n个玻璃珠从左到右排成一个序列叫做无聊者序列.一个非空的红色和蓝色玻璃珠组成的序列是一个无聊者序列.这个序列的玻璃珠颜色是交替的,例如:序列(红色:蓝色:红色)和(蓝色)是一个无聊者序列.(红色:红色)不是无聊者序列.现在,瓜瓜想知道,从这个序列中选出一个无聊者子序列有多少种方法.并将它mod(1000000007). Input: 输入有多组数据,输入一个整数n(1 <= n <= 10^6),代表这个

求斐波那契数列的第n个数(递归、非递归)

用递归的方式求斐波那契数列的第n个数. 用非递归的方式求斐波那契数列的第n个数. 定义: 斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368 特别指出:第0项是0,第1项是第一个1. 这个数列从第2项开始,每一项都等于前两项之和. #include<stdio.h> #include<stdlib.

poj 3070 Fibonacci (矩阵快速幂求斐波那契数列的第n项)

题意就是用矩阵乘法来求斐波那契数列的第n项的后四位数.如果后四位全为0,则输出0,否则 输出后四位去掉前导0,也...就...是...说...输出Fn%10000. 题目说的如此清楚..我居然还在%和/来找后四位还判断是不是全为0还输出时判断是否为0然后 去掉前导0.o(╯□╰)o 还有矩阵快速幂的幂是0时要特判. P.S:今天下午就想好今天学一下矩阵乘法方面的知识,这题是我的第一道正式接触矩阵乘法的题,欧耶! #include<cstdio> #include<iostream>

c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)

写一个函数,输入n,求斐波拉契数列的第n项. 斐波拉契数列:1,1,2,3,5,8...,当n大于等于3时,后一项为前面两项之和. 解:方法1:从斐波拉契数列的函数定义角度编程 #include<stdio.h> int fibonacci(int n) { int num1=1, num2=1, num3=0,i; if (n <= 2) { printf("斐波拉契数列的第%d项为:%d\n",n,num1); } else { for (i = 2; i <

利用矩阵求斐波那契数列

利用矩阵求斐波那契数列 flyfish 2015-8-27 矩阵(matrix)定义 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如 {acbd} 的数表称为二阶矩阵,它由二行二列组成,其中a,b,c,d称为这个矩阵的元素. 形如 {x1x2} 的有序对称为列向量Column vector 设 A={acbd} X={x1x2} 则 Y={ax1+bx2cx1+dx2} 称为二阶矩阵A与平面向量X的乘积,记为AX=Y 斐波那契(Fibonacci