Pythonは小学校の奥数問題のフィポラチ数列の桁数の問題を解決します

3901 ワード

このような数列は、1番目が1で、2番目が1で、3番目が2で、後ろの各数は、その前の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ビット近くの数になりました.数学的に1つの数が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個あります.