《程序员的算法趣题》-(日)增井敏克 , 书中为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]