RosettaCodeData/Task/Modular-exponentiation/Ruby/modular-exponentiation-3.rb
2023-07-01 13:44:08 -04:00

11 lines
239 B
Ruby

def mod_exp(n, e, mod)
fail ArgumentError, 'negative exponent' if e < 0
prod = 1
base = n % mod
until e.zero?
prod = (prod * base) % mod if e.odd?
e >>= 1
base = (base * base) % mod
end
prod
end