Python 算法不会只偶尔产生正确的结果



所以我试着写一个算法,计算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功能。

最新更新