euler_ex/solutions/23/solution.exs
2025-03-01 22:14:30 -05:00

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