Class: Integer
- Defined in:
- lib/numeric_inverse/ext/integer.rb,
lib/numeric_inverse/ext/integer.rb
Instance Method Summary collapse
-
#inverse(m = nil) ⇒ Object
(also: #inv)
Returns its inverse.
Instance Method Details
#inverse ⇒ Rational #inverse(m) ⇒ Integer Also known as: inv
Returns its inverse.
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/numeric_inverse/ext/integer.rb', line 25 def inverse(m = nil) return Rational(1, self) if m.nil? # extended Euclidean algorithm a, b, x, x0 = self, m, 1, 0 until b.zero? a, (q, b) = b, a.divmod(b) x, x0 = x0, x - q * x0 end # x is an inverse iff self.gcd(m) == 1 if a.abs != 1 raise ArgumentError, "modulus is not coprime to the receiver" end x = -x if a < 0 x % m # 0 <= x < m || m < x <= 0 end |