实现模乘法逆元算法
一、实验目的
通过本实验使学生掌握最大公因子算法的实现、同余类中元素的乘法逆元的求解。
二、实验原理
本实验的准备知识包括最大公约数、模运算及其基本性质、互素等概念。
-
最大公约数:a和b的最大公约数是能够同时整除a和b的最大正整数,记为:gcd(a,b)或(a,b)。
-
互素的(既约的):满足 gcd(a,b)=1 的 a 和 b。
-
同余(模运算):设整数 a,b,n(n≠0),如果 a-b 是 n 的整数倍(正的或负的),我们就说 a≡b(mod n),读作:a 同余于 b 模 n。
-
欧几里得算法:又称辗转相除法,基于定理 gcd(a,b)=gcd(b,a mod b) (a>b)
-
扩展的欧几里得算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y,使得 gcd(a,b) = ax+by。
-
乘法逆元素:假设 gcd(a,n)=1,则存在整数 s,t,使得 as+nt=1(由扩展的欧几里得算法可知),则 as≡1(mod n),因此 s 是 a(mod n)的乘法逆元素。且有: a − 1 a^{-1} a−1 ≡s(mod n)。
三、实验内容
实现以下算法,加深掌握模运算的性质
-
欧几里得算法
计算 gcd(23456,987654)
-
扩展的欧几里得算法
计算 8787 (mod 91919)的乘法逆元素
实验具体实现
python
如果我们使用python,由于有gmpy2
库的存在,自然是三句话让python给为写了十八个实验
gmpy2
实现
gmpy2.mpz(n)
初始化一个大整数gmpy2.invert(m,phi)
求 m o d ( p h i ) mod (phi) mod(phi)的逆元pow(m,e,n)
求 c d m o d n c^d mod n cdmodngmpy2.is_prime(n)
素数判断gmpy2.gcd(a,b)
欧几里得算法,最大公约数gmpy2.gcdext(a,b)
扩展欧几里得算法gmpy2.iroot(x,n)
x开n次根, x n \sqrt[n]{x}