有a very nice way来求python-3.8中的模逆(即,对于给定的a和m,b是ab ≡ 1 (mod m)):
a
m
b
ab ≡ 1 (mod m)
b = pow(a, -1, m)
pow内置在python-3.8中,c++中是否有类似的东西?
pow
l0oc07j21#
不,C++中没有内置函数(回答你的问题:)。
5t7ly7z52#
是的,相对标准的库boost有函数boost::integer::mod_inverse:
boost
boost::integer::mod_inverse
#include <boost/integer/mod_inverse.hpp> #include <iostream> using boost::integer::mod_inverse; int main(void) { int x = 3; int m = 5; int y = mod_inverse(x, m); std::cout << x << " ^-1 (mod " << m << ") = " << y << std::endl;; return 0; }
输出:
3 ^-1 (mod 5) = 2
参考文献:
请注意,如果a和m不是互质的,mod_inverse(x, m)返回0,而python的pow(x, -1, m)则引发ValueError: base is not invertible for the given modulus。
mod_inverse(x, m)
0
pow(x, -1, m)
ValueError: base is not invertible for the given modulus
2条答案
按热度按时间l0oc07j21#
不,C++中没有内置函数(回答你的问题:)。
5t7ly7z52#
是的,相对标准的库
boost
有函数boost::integer::mod_inverse
:输出:
参考文献:
boost::integer::mod_inverse
;boost::integer::mod_inverse
.请注意,如果
a
和m
不是互质的,mod_inverse(x, m)
返回0
,而python的pow(x, -1, m)
则引发ValueError: base is not invertible for the given modulus
。