在Python上使用三种方法的素数总和低于200万

时间:2017-02-28 21:34:40

标签: python sum primes

这个问题很简单但是这一次,我需要使用三种不同的方法而不是一种方法。它们是:isPrime,getPrimes,sumPrimes。

这是我原来的:

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的新手,所以我很感激一些反馈。感谢。

1 个答案:

答案 0 :(得分:0)

您因为没有基本情况递归调用 sum_primes 而导致堆栈爆炸。这是无限递归。正如M.法布尔已经指出的那样,你必须归还你的累积金额,而不是重复出现。此外,您的缩进是错误的。试试这个:

142913828922

此外,正如您将要发现的那样,通过单独检查和详尽划分生成所有这些素数是一个非常缓慢的过程。查看如何在Python中生成素数;在点击的第一页上将有完整的解决方案。即使是概率方法也可以完美地运行200万,而且 fast

我现在有一个解决方案总和

ScrollView:
    MyGrid:
        size_hint_y: self.rows / 10.0 + 1.0 #you should play with this a bit ...