1. 程式人生 > >《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q11)

《程式設計師的演算法趣題》-(日)增井敏克 Python解題 -- (Q11)

《程式設計師的演算法趣題》-(日)增井敏克 , 書中為69 道數學謎題編寫了解題程式, 程式語言為:Ruby,JavaScript,C語言。有興趣的同學,可以購書閱讀~

在此更新個人編寫的Python版,僅供學習使用。(執行環境:Python3.6)

Q11 斐波那契數列

     斐波那契數列由兩個 1 開端,其後的每一位數字都是前兩位數字之和。譬如 1 和 1 的和為 2, 1 和 2 的和為 3, 2 和 3 的和為 5,3 和 5 的和為 8……一直這樣繼續計算下去,就得到下面這樣的數列。

1,1,2,3,5,8,13,21,34,55,89,…

     這個數列就是“斐波那契數列”。

問題
      如下例所示,用斐波那契數列中的每個數除以其數位上所有數字之和。請繼續例中的計算,求出後續5 個最小的能整除的數。

      例)   2      → 2÷2
                3     → 3÷3
                5     → 5÷5
                8     → 8÷8
                21    → 21÷3  … 2+1=3,因而除以3
               144     → 144÷9  … 1+4+4=9, 因而除以9

Fibonacci_1 = 1
Fibonacci_2 = 1

result_list = []
# 例子包含了6個,繼續求後5例,所以共11個數
while len(result_list) < 11:
    next_fibonacci = Fibonacci_1 + Fibonacci_2
    Fibonacci_1 = Fibonacci_2
    Fibonacci_2 = next_fibonacci
    number_list = [int(i) for i in str(next_fibonacci)]
    if next_fibonacci % sum(number_list) == 0:
        result_list.append(next_fibonacci)
print("後續5個最小的能整除的數為:{0}".format(result_list[-5:]))

執行結果:

            後續5個最小的能整除的數為:[2584, 14930352, 86267571272, 498454011879264, 160500643816367088]