2017-02-28 8 views
-1

この質問は単純ですが、今回は単なる1つではなく3つの異なるメソッドを使用する必要があります。それらは:isPrime、getPrimes、sumPrimesです。3つのメソッドを使用して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) 

私の問題は、私は上記のステートメントは、sumPrimesなど、さまざま内で動作するようにprime_sum = 0で始まる得ることができる方法ですか?私はこれをやってみた:

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

のソリューションの合計を持っています。はるかに高速。 –

+1

「うまくいきません」は、問題文**ではありません。また、それらはちょうど*関数*であり、*メソッド*ではありません。 –

答えて

0

sum_primesをベースケースなしで再帰的に呼び出すため、スタックが爆発しました。これは無限再帰です。 M. Fabreはすでに指摘しているように、定期的なものではなく積算した金額を返さなければなりません。また、インデントに問題があります。これを試してみてください:

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万人で完全に動作し、それらはです。

は、私は今あなたが `_return最後にprime_sum` ...と2ミロンにプライムリストを生成するerathostenesのふるいを考慮しなければならない

142913828922 
関連する問題