local M = {}

function M.modinverse(b, m)
  local g, x, _ = M.gcd(b, m)
  if g ~= 1 then return nil end
  return x % m
end

function M.gcd(a, b)
  if a == 0 then return b, 0, 1 end
  local g, x1, y1 = M.gcd(b % a, a)
  return g, y1 - (math.floor(b / a)) * x1, x1
end

return M