Project Euler #7: 10001st Prime
Posted on 2017-03-12 by nbloomf
Spoiler alert! This page is part of a series on solutions to Project Euler problems. If you prefer to solve problems yourself, do not read on!
This post is literate Haskell; you can load the source into GHCi and play along.
First some boilerplate.
Problem 7 from Project Euler:
By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10001st prime number?
We already wrote a utility to list the primes for Problem 3:
isprime :: Integer -> Bool
isprime n = all (\p -> n`rem`p /= 0) $
takeWhile (\p -> p^2 <= n) primes
primes :: [Integer]
primes = 2 : filter isprime [3,5..]
There is no (known, useful) formula for generating the \(n\)th prime, so I’ll just take the 10001th entry of primes
.
pe7' :: Integer -> Integer
pe7' n = elt_at n primes
where
elt_at :: Integer -> [a] -> a
elt_at n (x:xs) = if n == 1
then x
else elt_at (n-1) xs
woo
So the final answer is