euler_ex/problems/21/solution.ex
2025-03-01 00:43:39 -05:00

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()