Python解决小学奥数题斐波拉契数列的个位数问题

这样的数列,第1个是1,第2个是1,第3个是2,后面的每一个数,都是它前面两个数之和。求:到第1997个数时,这些数中能被5整除的共有多少个?
要解决这个问题,用Python直接计算并计数,可以是这样的:

i=3
mycount=0
num1=1
num2=1
num3=num1+num2
while i<1998:#定义数的范围
    num1=num2
    num2=num3
    num3=num1+num2
    i+=1
    if num3%5==0:  #判断是否为5的倍数
        mycount+=1
print(mycount)

这样做,也能算出结果,但计算量较大,这个数列到1997位时,已经是近400位的数。
从数学上要判断一个数是5的倍数,只需要判断它的个位数是否为0或5,于是有了下面的修正后的代码:

i=3
mycount=0
num1=1
num2=1
num3=num1+num2
while i<1998:
    num1=num2
    num2=num3
    if num1>10:
        num1=num1%10
    if num2>10:
        num2=num2%10
    num3=num1+num2
    if num3>10:
        num3=num3%10
    i+=1
    if num3%5==0:
        mycount+=1
print(mycount)

运行代码,计算出结果为399。
也就是说:在斐波拉契数列里,第1997个数前面,能被5整除的数一共有399个。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页