26 lines
572 B
Elixir
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
|
|
|
|
|