2015-11-18 06:14:39 +00:00
|
|
|
defmodule RC do
|
|
|
|
|
def is_perfect(1), do: false
|
|
|
|
|
def is_perfect(n) when n > 1 do
|
2016-12-05 22:15:40 +01:00
|
|
|
Enum.sum(factor(n, 2, [1])) == n
|
2015-11-18 06:14:39 +00:00
|
|
|
end
|
2016-12-05 22:15:40 +01:00
|
|
|
|
|
|
|
|
defp factor(n, i, factors) when n < i*i , do: factors
|
|
|
|
|
defp factor(n, i, factors) when n == i*i , do: [i | factors]
|
|
|
|
|
defp factor(n, i, factors) when rem(n,i)==0, do: factor(n, i+1, [i, div(n,i) | factors])
|
|
|
|
|
defp factor(n, i, factors) , do: factor(n, i+1, factors)
|
2015-02-20 00:35:01 -05:00
|
|
|
end
|
2015-11-18 06:14:39 +00:00
|
|
|
|
|
|
|
|
IO.inspect (for i <- 1..10000, RC.is_perfect(i), do: i)
|