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整数として扱うことで正しい値が得られました。