问题描述
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。
输入格式
输入一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以10007的余数。
说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单。
参考代码
# 方法一:
n = int(input())
f1, f2, f3 = 1, 1, 1
for i in range(n-2):
f3 = (f1 + f2) % 10007
f1, f2 = f2, f3
print(f3)
# 方法二:
n=int(input())
list=[1,1]
for i in range(0,n-2):
s=list[0]+list[1]
list[0]=list[1]
list[1]=s%10007
print(list[1])
# 方法三:
# 运行超时
n = int(input())
def f(n):
if n == 1 or n == 2:
return 1
else:
return (f(n-2) + f(n-1)) % 10007
print(f(n))
思考
把Fn-1+Fn-2对10007取余之后再赋给Fn做下一次运算,这不是改变了Fibonacci数列的递推公式吗?