2017-02-28 29 views
-1

這個問題很簡單,但是這一次,我需要使用三種不同的方法而不是一種。他們是:isPrime,getPrimes,sumPrimes。在Python上使用三種方法的素數總和低於200萬

這是我原來的:

import sys 
print("") 

def is_prime(n): 
    for i in range(2, int(n**0.5) + 1): 
     if n % i == 0: 
      return False 
    return True 

prime_sum = 0 
for i in range(2, 10): #change 10 back to 2000000 
    if is_prime(i): 
     prime_sum += i 

print ("Sum of all the primes below 10 = ", prime_sum) 

我的問題是我怎麼可以得到prime_sum = 0開始到內的不同該項工作爲sumPrimes上述聲明?我試過這樣做:

def sum_primes(): 
    prime_sum = 0 
    for i in range(2, 10): #change 10 back to 2000000 
    if is_prime(i): 
     prime_sum += i 

    #print ("Sum of all the primes below 2,000,000 = ", prime_sum) 
print ("Sum of all the primes below 10 = ", prime_sum) 
return sum_primes() 

但它不起作用。我是Python的新手,所以我會很感激一些反饋。謝謝。

+0

的解決方案和您必須_RETURN'到底prime_sum' ...並考慮erathostenes的篩生成素列表2米倫。快多了。 –

+1

「它不工作」是**不是一個足夠的問題陳述**。另外,這些只是*函數*,它們不是*方法*。 –

回答

0

由於您在沒有基本情況下遞歸調用sum_primes,所以您吹掉了堆棧。這是無限遞歸。正如M.法布爾已經指出的那樣,你必須歸還你的累計總和,而不是經常性的。另外,你的縮進是錯誤的。試試這個:

def sum_primes(): 
    prime_sum = 0 
    for i in range(2, 10): #change 10 back to 2000000 
     if is_prime(i): 
     prime_sum += i 

    #print ("Sum of all the primes below 2,000,000 = ", prime_sum) 
    print ("Sum of all the primes below 10 = ", prime_sum) 
    return prime_sum 

sum_primes() 

而且,你要發現,產生由個體檢查和詳盡的劃分是一個非常緩慢的過程,所有的素數。查看如何在Python中生成素數;在第一頁的點擊中將會有完整的解決方案。即使概率方法完美地通過200萬,而那些快速

我現在有

142913828922 
相關問題