23 lines
384 B
Elixir
23 lines
384 B
Elixir
defmodule AmicableNumbers do
|
|
def divisors(n) do
|
|
[ 1 |
|
|
(for i <- 2..floor(:math.sqrt(n))//1,
|
|
div(n, i) == n / i do
|
|
[i, div(n, i)]
|
|
end |> Enum.flat_map(&(&1))) ]
|
|
end
|
|
end
|
|
|
|
ns = for i <- 1..10_000, into: %{} do
|
|
{i, AmicableNumbers.divisors(i) |> Enum.sum()}
|
|
end
|
|
|
|
for {a, b} <- ns,
|
|
a != b,
|
|
ns[b] == a,
|
|
reduce: 0
|
|
do
|
|
acc -> a + acc
|
|
end
|
|
|> IO.puts()
|
|
|