Pythonは小学校の奥数問題のフィポラチ数列の桁数の問題を解決します
このような数列は、1番目が1で、2番目が1で、3番目が2で、後ろの各数は、その前の2つの数の和です.求めます:第1997個まで数えて、これらの数の中で5に整除することができるのは全部で何個ありますか?この問題を解決するには、Pythonで直接計算してカウントします.
このようにして、結果を算出することもできますが、計算量が大きく、この数が1997ビットになったとき、すでに400ビット近くの数になりました.数学的に1つの数が5の倍数であると判断するには、その桁数が0または5であるかどうかを判断するだけで、以下の修正コードがあります.
コードを実行し、計算結果は399です.つまり、フィポラチ数列では、1997番目の数の前に、5で割り切れる数が399個あります.
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個あります.