Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Modular Multiplicative Inverse

Introduction
Synopsis
Usage
References

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.


PrevUpHomeNext