![]() |
Home | Libraries | People | FAQ | More |
The modular multiplicative inverse of a number a is that number x which satisfies ax = 1 mod p. A fast algorithm for computing modular multiplicative inverses based on the extended Euclidean algorithm exists and is provided by Boost.
#include <boost/integer/mod_inverse.hpp> namespace boost { namespace integer { template<class Z> boost::optional<Z> mod_inverse(Z a, Z m); }}
Multiplicative modular inverses exist if and only if a and m are coprime. So for example
auto x = mod_inverse(2, 5); if (x) { int should_be_three = x.value(); } auto y = mod_inverse(2, 4); if (!y) { std::cout << "There is no inverse of 2 mod 4\n"; }
Wagstaff, Samuel S., The Joy of Factoring, Vol. 68. American Mathematical Soc., 2013.