文章的环境是在ArchLinux下,python版本为最新3.8,如果是windows可能安装过程会遇到很多问题,可以在网上找找解决方法!
pipenv install gmpy2
pipenv install libnum
默认安装libnum
安装了gmpy2
,所以可直接安装libnum!
gmpy2是一个C编码的Python扩展模块,它支持多精度算术。gmpy模块仅支持GMP多重精度库。gmpy2增加了对MPFR和MPC库的支持。gmpy2还更新了API和命名约定,使其更加一致并支持其他功能。
都是高精度类型的,比普通Python数据类型处理的类型精度要高很多
mpz # 类似long类型 长度可达50位
mpq # 分数类型
mpfr # 与float类型相同,精度可达53位
mpc # 复数类型
模幂运算即对给定的整数 p p p, n n n, a a a,计算 a n a^n an mod p p p,这个运算在密码学中应用极为普遍,RSA,ElGamal,DH交换等都涉及模幂运算。
gmpy2.powmod(a, n, p)
欧几里得算法即利用辗转相除求得对于给定a和b的最大公约数
gmpy2.gcd(a, b)
下面为求最小公倍数
gmpy2.lcm(a,b)
gmpy2.gcdext(e1, e2) # 返回tuple, 满足s[1] * e1 + s[2] * e2 = 1
# example
e1 = 17
e2 = 65537
r = gmpy2.gcdext(e1, e2)
print(r[1] * e1 + r[2] * e2)
# 1
对于 a a a,求 b b b,使得 a a a b b b = 1 mod c c c
gmpy2.invert(a, c)
gmpy2.is_prime()
奇数检测
gmpy2.is_even()
偶数检测
gmpy2.is_odd()
更多参考文档:https://gmpy2.readthedocs.io/en/latest/