# Find the Nth Prime in Elixir

## February 21, 2015 elixir

I’ve been working through Exercism’s set of code challenges for Elixir, and came across this one.

Write a program that can tell you what the nth prime is.

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

This is a perfect use case for Elixir’s Stream module, because we want to generate a list of values and return the last one.

Stream contains a function called `iterate`, which takes a starting value, and then lazily generates new value based on the previous value. To create a Stream for primes, therefore, we can write something like this:

``````# Starting at 2, create new values using the next_prime/1 function
Stream.iterate(2, &next_prime/1)
``````

We can then chain a couple of other functions to generate only up to the number of primes requested, and return the last one.

``````def nth(count) do
Stream.iterate(2, &next_prime/1)
|> Enum.take(count)
|> List.last
end
``````

Finally, we must define the `next_prime/1` function. Given a starting point, it should iterate until it reaches another prime number.

``````def next_prime(num) do
num = num + 1

# If the factors only include this number, it's prime
if factors_for(num) == [num] do
num
else
next_prime(num)
end
end
``````

`factors_for/1` is also a function I defined, but I’ll leave it as an exercise for the reader.

I enjoyed getting to use Stream for the first time with this exercise. Ruby has something similar (Enumerable::Lazy), but I hadn’t used it or anything like it before. Another tool for the toolbox!