No.10 Summation of primes
問題.
考え方とプログラム例(Python)
実際に 2,000,000 未満の素数を 「エラトステネスの篩」 を用いて求め, 和を求めていきます.import math N = 2000000 num = [0]*N num[0] = 1 for i in range(N): if num[i] == 0: if i+1 > math.sqrt(N): break for n in range(2*(i+1), N+1, i+1): num[n-1] = 1 #Sum = sum(filter(lambda i : num[i-1] == 0, xrange(1, N+1))) Sum = sum([i + 1 for i in xrange(N) if num[i] == 0]) print(Sum)
エラトステネスの篩の部分は,
素数でない ⇔
となるように実装しています.
配列 にすべて 0 が入った状態から始めることで, エラトステネスの篩の最後の部分( を超えた時点で残っている数はすべて素数となる) を特に実装しなくて済みます.
最後に である の和を求める部分は,
- filter を利用した方法(コメントアウトしてあります)
- list の内包表記を利用した方法