题目
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)
