Python中的项目Euler问题5-如何优化我的解决方案?

aiazj4mn  于 2022-10-22  发布在  Python
关注(0)|答案(2)|浏览(167)

我目前正在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)

然而,我的代码需要很长时间才能运行。我想优化我的代码,让它运行得更快。

unhi4e5o

unhi4e5o1#

受早期评论的启发,您可以尝试数学gcd

from math import gcd

N = 20
ans = 1
for x in range(2, N+1):
    ans = ans * x // gcd(ans, x)

print(ans)
232792560
093gszye

093gszye2#

Project Euler #5 using pythonanswer更新到Python 3.9(请记住LCM(a,b,c)=LCM(b,b))。):

from math import gcd
from functools import reduce
print(reduce(lambda a, b: a * b // gcd(a, b), range(11, 21)))

自从Python 3.8以来,也有math.prod()可用,所以如果你知道LCM的含义和计算方法,就可以推断出:24(因为16是<=20)*32(因为9是<=2)5711131719(所有其他素数<=20的)=232792560

import math
print( math.prod([16, 9, 5, 7, 11, 13, 17, 19]) )

相关问题