蓝桥杯 基础练习 Fibonacci数列 python
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入包含一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
样例输入
10
样例输出
55
样例输入
22
样例输出
7704
数据规模与约定
1 <= n <= 1,000,000。
实现代码
f1=1
f2=1
n=int(input())
if n==1 or n==2:
print(f1%10007)
else:
for i in range(n-2):
f=(f1+f2)%10007
f1=f2
f2=f
print(f)
错误代码
f1=1
f2=1
n=int(input())
if n==1 or n==2:
print(f1%10007)
else:
for i in range(n-2):
f=f1+f2
f1=f2
f2=f
print((f)%10007)
注意事项
本题看似简单实则暗藏杀机Fibonacci数列 不断递推数据量庞大在n比较大时会出现超时问题,本题在问题描述中已经给予了我们提示“当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。”Fn非常大而我们需要知道的是Fn除以10007的余数所以提示我们可以绕过求Fn本身直接得到答案。而在递推前取余不影响结果。故而在递推前取余减少运算量。
|