エラトステネスの篩を使って、総和の計算をするだけ。
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;
}