简介
gmpy2是一个Python扩展模块,是对GMP的封装,它的前身是gmpy。
GMP(即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数、实数、浮点数的高精度运算,还有随机数生成,尤其是提供了非常完备的数论中的运算接口,比如Miller-Rabin素数测试算法、大素数生成、欧几里德算法、求域中元素的逆、Jacobi符号、legendre符号等。
常见函数
求两整数的最大公因数
import gmpy2
a = gmpy2.gcd(5,20)
print(a)

判断一个数是否为素数
import gmpy2
a = gmpy2.is_prime(5)
print(a)
#返货布尔值

判断一个数是否为偶/奇数
import gmpy2
#判断一个数是否为偶数
a = gmpy2.is_even(4)
print(a)
#判断一个数是否为奇数
b = gmpy2.is_odd(4)
print(b)
#返回布尔值

求一个数开x根式
import gmpy2
#求一个数开x根式
a = gmpy2.iroot(8,3)
print(a)

初始化大整数
import gmpy2
#初始化大整数
a = gmpy2.mpz(845581556941265)
print(a)

求一个数模x的逆元y(主要用于RSA中)
import gmpy2
#求一个数模x的逆元y
#如3*2 = 1 mod 5
a = gmpy2.invert(3,5)
print(a)

求一个整数的x次幂模y取余(主要用于RSA中)
import gmpy2
#求一个整数的x次幂模y
#如3^3 mod 4(即27%4)
a = gmpy2.powmod(3,3,4)
print(a)

其实基础库中的pow也能进行此运算

在RSA算法中需要用到的是invert函数求一个数模x的逆元y
逆元
逆元怎么理解
以取模公式为例
