27 lines
598 B
Elixir
27 lines
598 B
Elixir
defmodule Abundance do
|
|
def is_abundant?(n) do
|
|
cache = Process.get(:abundance, %{})
|
|
|
|
case cache |> Map.get(n) do
|
|
nil ->
|
|
sum = Euler.Algebra.divisors(n) |> Enum.sum()
|
|
is? = sum > n
|
|
Process.put(:abundance, Map.put(cache, n, is?))
|
|
is?
|
|
is? -> is?
|
|
end
|
|
end
|
|
end
|
|
|
|
# sum of all numbers that can be expressed as sum of two abundant numbers
|
|
sum = for n <- 1..28123,
|
|
mid = div(n, 2),
|
|
Enum.any?(1..mid, &(Abundance.is_abundant?(&1) and Abundance.is_abundant?(n - &1))),
|
|
reduce: 0
|
|
do
|
|
s -> s + n
|
|
end
|
|
|
|
|
|
(((28123*28124)/2) - sum)
|
|
|> IO.puts()
|