by Nicolas Wu

Posted on 2 September 2010

The task for this week’s Project Euler problem is as follows:

Calculate the sum of all the primes below two million.

Well, we’ve already seen how to generate primes, and here we’ll be using the `spanPrimes`

definition from Euler #7:

```
> primes :: [Int]
> primes = 2 : 3 : sieve 0 (tail primes) 5
> where
> sieve k (p:ps) x = [n | n <- [x,x+2..p*p-2]
> , and [n`rem`p/=0 | p <- fs]]
> ++ sieve (k+1) ps (p*p+2)
> where fs = take k (tail primes)
```

Now we need to be able to sum all the values from this list that are less than two million.

We’ve already seen a summing problem where a predicate is involved in Euler #2, where we used a `takeWhile`

to take all the values that satisfied a condition. Here we’ll be using this function again, to make sure that our values are all below two million, before summing the result:

`> euler10 = sum $ takeWhile (< 2000000) primes`

This week’s problem was pretty easy to solve, since we used functions we had already been introduced to.

- Reusing functions makes quick work of related problems.

As of next week I’ll be shelving the Project Euler series of posts for a while, and moving onto something completely different. I hope you’ve enjoyed the ride!