如何使质数的总和更快?

时间:2013-12-30 21:15:00

标签: python primes

def is_prime(x):
    if x<2:
        return False
    elif x%2==0:
        if x==2:
            return True
        else:
            return False
    else:
        for i in range(3,x+1,2):
            if x%i==0 and i==x:
                return True
                break
            elif x%i==0:
                return False
                break


def sum_primes(m):
    total=0
    for i in range (3,m,2):
        if is_prime(i):
            total+=i
    return total+2

print sum_primes(2000000)

我正在尝试解决Project-Euler问题,并且这个程序可以运行,但是给我答案需要太多时间。我怎样才能让它变得更快?

2 个答案:

答案 0 :(得分:2)

之前已经问过这个问题:

上述链接中列出了多种方法。您可能还会发现此链接很有用:

您也可以考虑尝试使用Cython进行优化。

答案 1 :(得分:0)

Eratosthenes的筛子列举了素数,sum累积它们;首先列出从2到 n 的数字,将它们标记为素数,然后按顺序扫描列表,在每个素数处停止以标记其多重复合,按顺序收集素数。

function sumPrimes(n) # sum of primes less than n
    sum, sieve := 0, makeArray(2..n, True)
    for p from 2 to n
        if sieve[p]
            sum := sum + p
            for i from p*p to n step p
                sieve[i] = False
    return sum

我会留给你翻译成Python。

如果您对使用素数编程感兴趣,我会在我的博客上谦虚地推荐this essay