Problem 10

Problem 10

module Problem_0010

(*
【問題】
10以下の素数の和は2 + 3 + 5 + 7 = 17である.
200万以下の全ての素数の和を計算しなさい.
A. 142913828922L
694 ms
*)

// ぱくりコード
// http://blogs.msdn.com/b/mpeck/archive/2009/03/03/solving-problems-in-csharp-and-fsharp-part-1.aspx
open System.Collections
let getPrimes (max : int64) =
    let primes = new BitArray(int(max+1L), true)
    seq { 2L .. max }
    |> Seq.filter (fun n ->
        let n2 = int n
        if primes.[n2] then
            for i in (n*n)..n..max do primes.[int i] <- false
        primes.[n2])

let run() =
    getPrimes 2000000L |> Seq.reduce((+))