36 lines
849 B
Plaintext
36 lines
849 B
Plaintext
defmodule Primorial do
|
|
def first(n,primes) do
|
|
s = 0..9 |> Stream.map(fn n -> Enum.at(primes,n) end)
|
|
(0..n-1)
|
|
|> Enum.map(fn a -> s
|
|
|> Enum.take(a)
|
|
|> Enum.reduce(1, fn b,c -> b*c end)
|
|
|> format(a) end)
|
|
end
|
|
|
|
def numbers(lims,primes) do
|
|
numbers(lims,primes,[])
|
|
end
|
|
|
|
def numbers([],_primes,vals) do
|
|
vals
|
|
|> Enum.reverse
|
|
|> Enum.map(fn {m,n} -> str_fr(n,m) end)
|
|
end
|
|
|
|
def numbers([lim|lims],primes,vals) do
|
|
numbers(lims,primes,[{lim,number_length(primes,lim)}] ++ vals)
|
|
end
|
|
|
|
defp number_length(primes,n) do
|
|
primes
|
|
|> Enum.take(n)
|
|
|> Enum.reduce(fn a,b -> a * b end)
|
|
|> Integer.to_string
|
|
|> String.length
|
|
end
|
|
|
|
defp format(pri,i), do: IO.puts("Primorial #{i}: #{pri}")
|
|
defp str_fr(pri,i), do: IO.puts("Primorial #{i} has length: #{pri}")
|
|
end
|