エラトステネスの篩を使って、総和の計算をするだけ。
Schemeのコードは、Scheme:数遊び:素数列に載せられているgemmaさんのコードを参考、もとい、パクらせていただいた。
Scheme
(use srfi-1) (use srfi-42) (use numbers) (define (primes n) (let loop ((l (unfold (lambda (x) (> x n)) values (lambda (x) (+ x 2)) 3)) (primes-list '(2))) (let ((m (car l))) (if (> (* m m) n) (append primes-list l) (loop (remove (lambda (x) (zero? (modulo x m))) l) (cons m primes-list)))))) (define (p010) ;リストが長すぎて、applyを呼び出すとエラーが起きる…… ;(print (apply + (primes 2000000))) (print (sum-ec (: i (primes 2000000)) i))) (p010)
C++
#include <cstdio> #include <cstring> #define LIM 2000000 char primes[LIM+1]; void e() { memset(primes, 1, sizeof(primes)); primes[1] = 0; for (int i = 2; i <= LIM; i++) for (int j = 2*i; j <= LIM; j += i) primes[j] = 0; } int main() { long long ans; e(); ans = 0; for (int i = 1; i <= LIM; i++) if (primes[i]) ans += i; printf("%lld\n", ans); return 0; }