GMP(全称是GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),是一个开源的高精度运算库,其中不但有普通的整数、实数、浮点数的高精度运算,还有随机数生成,尤其是提供了非常完备的数论中的运算接口,比如Miller-Rabin素数测试算法、大素数生成、欧几里德算法、求域中元素的逆、Jacobi符号、legendre符号等。gmpy2 是 Python 的一个扩展库,是对 GMP 的封装,它的前身是 gmpy。
安装 gmp
sudo apt-get install libgmp-dev
安装 mpfr
sudo apt-get install libmpfr-dev
安装 mpc
sudo apt-get install libmpc-dev
安装 gmpy2
sudo pip3 install gmpy2
sudo pip install gmpy2
使用
import gmpy2
gmpy2.mpz(n) #初始化一个大整数
gmpy2.mpfr(x) # 初始化一个高精度浮点数x
d = gmpy2.invert(e,n) # 求逆元,de = 1 mod n
C = gmpy2.powmod(M,e,n) # 幂取模,结果是 C = (M^e) mod n
gmpy2.is_prime(n) #素性检测
gmpy2.gcd(a,b) #欧几里得算法,最大公约数
gmpy2.gcdext(a,b) #扩展欧几里得算法
gmpy2.iroot(x,n) #x开n次根