2017-06-27 42 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