题目

The sum of the primes below 10 is 2+3+5+7=17.

Find the sum of all the primes below two million.

解答

这道题也是挺简单的,遍历一下,找到所有的质数,然后加和。判断质数的函数在《第七道题—PE7: 10001st Prime》已经写了,于是我们直接import进来使用就可以了。

import numpy as np  
  
from problem7 import is_prime  
  
def all_primes(N):  
    primes = []  
    for i in range(N):  
        if is_prime(i):  
            primes.append(i)  
      
    return primes  
  
def sum_prime(N):  
    return np.sum(np.array(all_primes(N)))

这里就写成两个函数,一个函数传入一个数,找到比这个数小的所有质数。第二个函数就是调用这个函数,把比N小的所有质数进行加和。

于是我们的答案,就是调用第二个函数,设N为2百万,算起来速度也可以,8.8秒。

R版本,我们就基本上照搬《第七道题—PE7: 10001st Prime》:

u <- 2 * 10^6  
x <- rep(TRUE, u)  
for (i in seq(2, ceiling(sqrt(u)))) {  
    x[seq(2, u %/% i) * i] <- FALSE  
}  
  
primes <- which(x)[-1]  
sum(primes)