21 lines
733 B
Elixir
21 lines
733 B
Elixir
defmodule Proper do
|
|
def divisors(1), do: []
|
|
def divisors(n), do: [1 | divisors(2,n,:math.sqrt(n))] |> Enum.sort
|
|
|
|
defp divisors(k,_n,q) when k>q, do: []
|
|
defp divisors(k,n,q) when rem(n,k)>0, do: divisors(k+1,n,q)
|
|
defp divisors(k,n,q) when k * k == n, do: [k | divisors(k+1,n,q)]
|
|
defp divisors(k,n,q) , do: [k,div(n,k) | divisors(k+1,n,q)]
|
|
|
|
def most_divisors(limit) do
|
|
{length,nums} = Enum.group_by(1..limit, fn n -> length(divisors(n)) end)
|
|
|> Enum.max_by(fn {length,_nums} -> length end)
|
|
IO.puts "With #{length}, Number #{inspect nums} has the most divisors"
|
|
end
|
|
end
|
|
|
|
Enum.each(1..10, fn n ->
|
|
IO.puts "#{n}: #{inspect Proper.divisors(n)}"
|
|
end)
|
|
Proper.most_divisors(20000)
|