Project Euler Problem 10

問題10: 200万以下の全ての素数の和を求める[=>問題文]
 なんだかずいぶん投げやりな問題ですね。問題3で素数リストを作成する「エラトステネスのふるい関数」をつくってあるので活用しましょう。

問題10の解答

(defun problem010 (N)
  (apply #'+ (cons 0.0 (primes-sieve N))))

(problem010 2000000)

 200万までの素数の和は28bit整数の最大値を超えてしまいます。ふるい関数 primes-sieve は、28bit整数しかサポートしませんので、生成するリストも 28bit整数のリストになります。そのまま #'+ してしまうとオーバーフローするので、リストの先頭に float型の 0.0 を追加しています。今回もfloatを52bit整数として扱うことで正しい値が得られました。