morris555's diary

高校生のブログです。

Problem 10

Ploblem 10です。

200万以下の全ての素数の和を求める問題です。

primes = 2:primes'
  where
    primes' = 3:sieve 0 5
    sieve i x = filter isPrime [x, x+2..p*p-2] ++ sieve (i+1) (p*p+2)
      where
        (ps,p:_) = splitAt i primes'
        isPrime x = all ((/=0).rem x) ps

main = print . sum . takeWhile (<=2000000) $ primes

やっぱり遅い

結構時間かかります。

素数をはやく求めるのはどうしたらいいのかな?