호두나무 공방/Exercism in Elixir

Prime Factors - Exercism in Elixir

2022. 7. 21. 22:14

문제 보기

자연수를 소인수분해하는 문제였다. 재귀를 이용하는 이런 방식은 아마 성능이 그닥 좋지 않을 것 같긴 하지만...

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