Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
33
Task/Emirp-primes/Elixir/emirp-primes.elixir
Normal file
33
Task/Emirp-primes/Elixir/emirp-primes.elixir
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
defmodule Emirp do
|
||||
defp prime?(2), do: true
|
||||
defp prime?(n) when n<2 or rem(n,2)==0, do: false
|
||||
defp prime?(n), do: prime?(n,3)
|
||||
|
||||
defp prime?(n,k) when n<k*k, do: true
|
||||
defp prime?(n,k) when rem(n,k)==0, do: false
|
||||
defp prime?(n,k), do: prime?(n,k+2)
|
||||
|
||||
def emirp?(n) do
|
||||
if prime?(n) do
|
||||
reverse = to_string(n) |> String.reverse |> String.to_integer
|
||||
n != reverse and prime?(reverse)
|
||||
end
|
||||
end
|
||||
|
||||
def task do
|
||||
emirps = Stream.iterate(1, &(&1+1)) |> Stream.filter(&emirp?/1)
|
||||
first = Enum.take(emirps,20) |> Enum.join(" ")
|
||||
IO.puts "First 20 emirps: #{first}"
|
||||
between = Enum.reduce_while(emirps, [], fn x,acc ->
|
||||
cond do
|
||||
x < 7700 -> {:cont, acc}
|
||||
x in 7700..8000 -> {:cont, [x | acc]}
|
||||
true -> {:halt, Enum.reverse(acc)}
|
||||
end
|
||||
end) |> Enum.join(" ")
|
||||
IO.puts "Emirps between 7,700 and 8,000: #{between}"
|
||||
IO.puts "10,000th emirp: #{Enum.at(emirps, 9999)}"
|
||||
end
|
||||
end
|
||||
|
||||
Emirp.task
|
||||
Loading…
Add table
Add a link
Reference in a new issue