Project Euler — Problem 10 Solution

Problem

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two mil­lion.

Solution

 

open System

let findFactorsOf(n:int64) =
    let upperBound = int64(Math.Sqrt(double(n)))
    [2L..upperBound] |> Seq.filter (fun x -> n % x = 0L)

let isPrime(n:int64) = findFactorsOf(n) |> Seq.length = 0

let primeSequence max = seq { for n in 2L..max do if isPrime(n) then yield n }
let sum = primeSequence 1999999L |> Seq.sum

Yet anoth­er prime num­ber relat­ed prob­lem, and I’ve bor­rowed the find­Fac­tor­sOf and isPrime func­tions from the prob­lem 3 solu­tion here.

The only inter­est­ing bit of code here is the prime­Se­quence func­tion, which gen­er­ates a sequence of prime num­bers equal or greater than 2, up to the spec­i­fied max using a for … in loop. The for…in loop is basi­cal­ly the same as a fore­ach (var .. in ..) loop in C#.