欧拉5:概括

时间:2017-06-27 23:07:00

标签: python

我正试图通过这种更普遍的方式来解决项目欧拉问题5。

被问到的问题:

  

2520是可以除以每个数字的最小数字   从1到10没有任何余数。

     

可被所有人整除的最小正数是多少   从1到20的数字?

这是我的代码,它给出了奇怪的结果 当我使用num1 = 1和num2 = 10时,我得到1260:正确答案的一半。当我使用num1 = 1和num2 = 20时,我得到正确答案为232792560的1/4。

num1 = int(input("Input lower range of primes: "))
num2 = int(input("Input upper range of primes: "))

def primes(num1,num2):
    list_primes = []
    for i in range(num1,num2 + 1):
        for a in range(2,i):
            if i % a == 0:
                break
        else:
            list_primes.append(i)

    return list_primes

primex = primes(num1, num2)

prod = 1
for p in primex:
    n = 2
    prod *= p
    while (p**n < (num2 + 1)):
        prod *= p
        n += 1
        break
print(primex)
print(prod)

我借用的这段代码给出了正确的结果

primes = [2,3,5,7,11,13,17,19]
prod = 1 
for p in primes:
    n = 2
    prod *= p
    while (p**n < 21):
        prod *= p
        n += 1

print(prod)

1 个答案:

答案 0 :(得分:0)

主要的错误是你在一次迭代后突破了while循环。因此,对于任何大于2的素数因子,你都会得出结果。在这些情况下,当正确的数量为2 ^ 3(10)和2 ^ 4(20)时,使用2 ^ 2作为最高因子2。如果你去30,你也会做3(平方而不是立方)。

只需删除break声明;它不在你借来的代码中。

另外,使用2作为下限;从1开始,您将其包含为素数。这将使您的while循环永久运行,因为p**n的所有值n为1。

原始代码的输出(10)

[1, 2, 3, 5, 7]
1260

修复代码的输出(10)

[2, 3, 5, 7]
2520

修复代码的输出(10)

[2, 3, 5, 7, 11, 13, 17, 19]
232792560