我目前正在Python中研究项目Euler问题#5。
问题是“2520是可以被从1到10的每一个数字除的最小数,没有任何余数。可以被1到20的所有数字平均除的最小正数是多少?”
我通过编写以下代码解决了这个问题:
d = 0
z = 0
while z < 20:
d += 1
z = 0
for i in range(1,21):
if d % i != 0:
z = 0
else:
z += 1
print(d)
然而,我的代码需要很长时间才能运行。我想优化我的代码,让它运行得更快。
2条答案
按热度按时间unhi4e5o1#
受早期评论的启发,您可以尝试数学gcd:
093gszye2#
从Project Euler #5 using python的answer更新到Python 3.9(请记住LCM(a,b,c)=LCM(b,b))。):
自从Python 3.8以来,也有
math.prod()
可用,所以如果你知道LCM的含义和计算方法,就可以推断出:24(因为16是<=20)*32(因为9是<=2)5711131719(所有其他素数<=20的)=232792560