mirror of
				https://github.com/boostorg/integer.git
				synced 2025-11-04 02:01:38 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
[section:mod_inverse Modular Multiplicative Inverse]
 | 
						|
 | 
						|
[section Introduction]
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
[endsect]
 | 
						|
 | 
						|
[section Synopsis]
 | 
						|
 | 
						|
    #include <boost/integer/mod_inverse.hpp>
 | 
						|
 | 
						|
    namespace boost { namespace integer {
 | 
						|
 | 
						|
      template<class Z>
 | 
						|
      boost::optional<Z> mod_inverse(Z a, Z p);
 | 
						|
 | 
						|
    }}
 | 
						|
 | 
						|
[endsect]
 | 
						|
 | 
						|
[section Usage]
 | 
						|
 | 
						|
Multiplicative modular inverses exist if and only if /a/ and /p/ 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";
 | 
						|
    }
 | 
						|
 | 
						|
[endsect]
 | 
						|
 | 
						|
[section References]
 | 
						|
Wagstaff, Samuel S., ['The Joy of Factoring], Vol. 68. American Mathematical Soc., 2013.
 | 
						|
 | 
						|
[endsect]
 | 
						|
[endsect]
 | 
						|
[/
 | 
						|
Copyright 2018 Nick Thompson.
 | 
						|
Distributed under the Boost Software License, Version 1.0.
 | 
						|
(See accompanying file LICENSE_1_0.txt or copy at
 | 
						|
http://www.boost.org/LICENSE_1_0.txt).
 | 
						|
]
 |