자연수를 소인수분해하는 문제였다. 재귀를 이용하는 이런 방식은 아마 성능이 그닥 좋지 않을 것 같긴 하지만...
defmodule PrimeFactors do
@doc """
Compute the prime factors for 'number'.
The prime factors are prime numbers that when multiplied give the desired
number.
The prime factors of 'number' will be ordered lowest to highest.
"""
@spec factors_for(pos_integer) :: [pos_integer]
def factors_for(number) do
do_factors_for(number, 2, [])
|> Enum.reverse()
end
defp do_factors_for(number, divisor, acc) when number >= 2 do
if rem(number, divisor) == 0 do
do_factors_for(div(number, divisor), divisor, [divisor | acc])
else
do_factors_for(number, divisor + 1, acc)
end
end
defp do_factors_for(_, _, acc) do
acc
end
end
'호두나무 공방 > Exercism in Elixir' 카테고리의 다른 글
Isogram - Exercism in Elixir (0) | 2022.07.25 |
---|---|
Perfect Numbers - Exercism in Elixir (0) | 2022.07.22 |
Matching Brackets - Exercism in Elixir (0) | 2022.07.20 |
House - Exercism in Elixir (0) | 2022.07.19 |
ISBN Verifier - Exercism in Elixir (0) | 2022.07.18 |