所以我试着写一个算法,计算1-20的最小倍数。这是我的代码:
multiples = range(2,11)
check = False
start = 1
while check is False:
n = [start%i for i in multiples]
if sum(n) == 0:
check = True
print(start)
else:
start = start+1
事实上,它在range(2,11)
上工作,并给出正确的答案(2520(。然而,当我尝试将代码扩展到range(2,21)
时,它似乎不会生成答案(它会无限循环(。有人能告诉我它怎么了吗?
问题是这是一个效率极低的算法。更好的方法是(使用OP的变量名(:
def lowest_common_multiple(a, b):
# This would be replaced by the real code;
# OP can search for an algorithm or implementation
return a * b
multiples = range(2,21)
start = 1
for i in multiples:
start = lowest_common_multiple(start, i)
print(start)
下面是一篇关于LCM算法的StackOverflow文章,让您开始学习。
注意,Python 3.9和NumPy都提供LCM功能。