lab02 q2
This commit is contained in:
1 file changed
+42
@@ -0,0 +1,42 @@
|
||||
defmodule Primes do
|
||||
defp sieve([], acc, _) do
|
||||
Enum.reverse(acc)
|
||||
end
|
||||
|
||||
defp sieve([h | t], acc, n) do
|
||||
if h * h > n do
|
||||
Enum.reverse(acc) ++ [h | t]
|
||||
else
|
||||
sieve(
|
||||
Enum.filter(t, fn x -> rem(x, h) != 0 end),
|
||||
[h | acc],
|
||||
n)
|
||||
end
|
||||
end
|
||||
|
||||
def primes(n) do
|
||||
l = Enum.to_list(2..n)
|
||||
sieve(l, [], n)
|
||||
end
|
||||
|
||||
defp largest_permutation_set(p) do
|
||||
p |> Enum.group_by(fn x -> x
|
||||
|> Integer.to_string()
|
||||
|> String.to_charlist()
|
||||
|> Enum.sort() end)
|
||||
|> Map.values()
|
||||
|> Enum.max_by(&length/1)
|
||||
end
|
||||
|
||||
def run(n, d) do
|
||||
p = primes(n)
|
||||
p = Enum.filter(p, fn x ->
|
||||
String.length(Integer.to_string(x)) >= d
|
||||
end)
|
||||
|
||||
IO.puts(length(p))
|
||||
IO.puts(length(largest_permutation_set(p)))
|
||||
end
|
||||
end
|
||||
|
||||
Primes.run(1_000_000, 6);
|
||||
Reference in new issue
Block a user