Skip to content

Instantly share code, notes, and snippets.

@xavvvier
Last active September 17, 2021 10:35
Show Gist options
  • Save xavvvier/858bae60cea208e5fe92f040a3328294 to your computer and use it in GitHub Desktop.
Save xavvvier/858bae60cea208e5fe92f040a3328294 to your computer and use it in GitHub Desktop.
An elixir function to calculate the nth prime number
defmodule PrimeNumber do
def is_prime(2), do: true
def is_prime(number) do
not Enum.any?(2..number-1, fn x -> rem(number, x) == 0 end)
end
def prime(n) do
Stream.interval(1)
|> Stream.filter(&is_prime/1)
|> Enum.take(n)
end
end
1..100
|> Enum.filter(&PrimeNumber.is_prime/1)
|> IO.inspect()
PrimeNumber.prime(25)
|> IO.inspect()
## Another version taken from elixirforum.com
defmodule Prime do
def nth_prime(n) do
Stream.iterate(1, &(&1 + 1))
|> Stream.filter(&prime?(&1))
|> Stream.with_index(1)
|> Enum.find(fn {_prime, x} -> x == n end)
end
def prime?(1), do: false
def prime?(2), do: true
def prime?(3), do: true
def prime?(5), do: true
def prime?(7), do: true
def prime?(n) when rem(n, 2) == 0, do: false
def prime?(n) do
limit = [7, round(:math.sqrt(n))] |> Enum.max
Stream.iterate(3, &(&1 + 2))
|> Stream.take_while(fn x -> x <= limit end)
|> Stream.filter(fn x -> rem(n,x) == 0 end)
|> Enum.empty?
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment