Elixir Min Perimeter Rectangle
defmodule MinPerimeterRectangle do
  def min_perimeter_rectangle(n), do: loop(1, n, :infinity)

  defp loop(i, n, min) when i * i < n do
    candidate = if rem(n, i) == 0, do: 2 * (i + div(n, i)), else: nil

    min =
      cond do
        is_nil(candidate) -> min
        min == :infinity -> candidate
        candidate < min -> candidate
        true -> min
      end

    loop(i + 1, n, min)
  end

  defp loop(_i, _n, min), do: min
end

This searches factor pairs up to the square root and picks the pair with the smallest perimeter.