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