euler_ex/problems/lib/euler/algebra.ex

26 lines
572 B
Elixir

defmodule Euler.Algebra do
def divisors(n) do
[ 1 |
(for i <- 2..floor(:math.sqrt(n))//1,
j = div(n, i),
j == n / i do
if i !== j, do: [i,j], else: [i]
end |> Enum.flat_map(&(&1))) ]
end
defp fact(1, acc), do: acc
defp fact(n, acc), do: fact(n - 1, n * acc)
@doc """
Computes n!
"""
def fact(n), do: fact(n - 1, n)
defp digit_sum(0, acc), do: acc
defp digit_sum(n, acc), do: digit_sum(div(n, 10), rem(n, 10) + acc)
@doc """
Returns the sum of the digits of `n`.
"""
def digit_sum(n), do: digit_sum(n, 0)
end