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