advent_of_code/elixir/lib/util/math.ex
2024-11-15 21:03:49 -05:00

36 lines
678 B
Elixir

defmodule AoC.Util.Math do
@moduledoc """
Math utility methods.
"""
@doc """
Returns the greatest common divisor of integers a and b.
"""
@spec gcd(integer(), integer()) :: integer()
def gcd(0, 0) do
0
end
@spec gcd(integer(), integer()) :: integer()
def gcd(a, a) do
a
end
@spec gcd(integer(), integer()) :: integer()
def gcd(a, b) when a > b do
gcd(a - b, b)
end
@spec gcd(integer(), integer()) :: integer()
def gcd(a, b) do
gcd(a, b - a)
end
@doc """
Returns the least common multiple of integers a and b.
"""
@spec lcm(integer(), integer()) :: integer()
def lcm(a, b) do
div(a * b, gcd(a, b))
end
end