2017-06-27 47 views
-2

我试图让搞清楚项目欧拉问题5.欧拉5:归纳

问的这个更广义的方式被问:

2520是可以由每个划分的最小数量数字 从1到10,没有任何余数。

什么是可以被1至20的数字中的所有 均匀划分的最小正数?

这是我的代码,让奇怪的结果 当我使用NUM1 = 1和NUM2 = 10,我得到1260:一半是正确的答案。当我使用NUM1 = 1和NUM2 = 20,我得到1/4的232792560.

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) 
+0

是什么问题问你要做什么?什么是正确的结果?你得到的结果是什么?编辑你的问题来解决这些问题,我们可以帮助你更好。 – mgarey

回答

0

主要错误是您在单次迭代后跳出while循环。因此,对任何度数大于2的素数因子来说,都会出现这种情况。在这些情况下,当正确数量为10时为2^3,20时为2^4,则使用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