about summary refs log tree commit diff
path: root/users/wpcarro/assessments/semiprimes/server/lib/math.ex
diff options
context:
space:
mode:
Diffstat (limited to 'users/wpcarro/assessments/semiprimes/server/lib/math.ex')
-rw-r--r--users/wpcarro/assessments/semiprimes/server/lib/math.ex26
1 files changed, 26 insertions, 0 deletions
diff --git a/users/wpcarro/assessments/semiprimes/server/lib/math.ex b/users/wpcarro/assessments/semiprimes/server/lib/math.ex
new file mode 100644
index 0000000000..8a33be4753
--- /dev/null
+++ b/users/wpcarro/assessments/semiprimes/server/lib/math.ex
@@ -0,0 +1,26 @@
+defmodule Math do
+  @moduledoc """
+  Math utilities.
+  """
+  alias Extras
+
+  @doc """
+  Returns the prime factors for `n`.
+
+  ## Examples
+
+      iex> Math.factor(15)
+      [3, 5]
+
+  """
+  def factor(1), do: []
+
+  def factor(n) do
+    Extras.range(2, n - 1)
+    |> Enum.find(&(rem(n, &1) == 0))
+    |> case do
+      nil -> [n]
+      x -> [x | factor(div(n, x))]
+    end
+  end
+end