问题描述
如果a∗b≡1(modn),≡符号表示a∗b%n=1,%表示模运算,模运算就是取余,x%y=x−⌊yx⌋∗y,例如5%3=2
则a,b在模n情况下互为模逆元,模逆元可以记为a−1,即a−1≡b(modn),b−1≡a(modn)
a在模n的情况下,存在模逆元的充要条件是gcd(a,n)=1,gcd(a,n)表示a和n的最大公约数,即a与n互素。
简单描述一下,非正式的证明:
-
必要条件证明:如果a与n不互素,设gcd(a,n)=d>1,对于任意的整数b,a∗b(modn)≡a∗b−k∗n(modn),其中0≤a∗b−k∗n<n,由于a是d的倍数,n也是d的倍数,因此a∗b−k∗n也是d的倍数,即对任意的b,a∗b(modn)整除d,d>1,与存在模拟元的前提矛盾,所以若存在a∗b≡1(modn),则a,n必须互素
-
充分条件证明:如果a与n互素,我们首先证明a∗k在1≤k≤n−1时,任意两个不同的k乘以a模n必定不相等,且不为0,
- 首先若要a∗k≡0(modn),则a∗k是n的倍数,由于gcd(a,n)=1,则k必须是n的倍数,与1≤k≤n−1矛盾,因此a∗k=0(modn)
- 其次证明对于任意两个k1,k2,a∗k1=a∗k2(modn):假设a∗k1≡a∗k2(modn),则意味着a∗k1−a∗k2=a∗(k1−k2)≡0(modn),而1≤k1,k2≤n−1,所以1≤∣k1−k2∣<n−1,根据上面的证明,在1≤k≤n−1时,a∗k=0(modn),与假设矛盾,得证
由上可知a∗k模n在1≤k≤n−1时,结果集合为{1,2,3,...,n−1},因此必定存在某个k,使得a∗k≡1(modn)
求解模拟元的方法
方法1-欧拉定理
a−1=aϕ(n)−1,ϕ(n)表示小于n且与n互素的数的个数
证明:
设{a1,a2,...,aϕ(n)}为所有与n互素的数,由上面模逆元存在性的证明可知:
a∗ai=a∗aj(modn)(1≤i,j≤ϕ(n),i=j),
因此:{a∗a1,a∗a2,...,a∗aϕ(n)}(modn) 每个都不相等,且与n互素
即:两个集合在模n的情况下完全相等,{a∗a1,a∗a2,...,a∗aϕ(n)}={a1,a2,...,aϕ(n)}(modn)
可以得出:a∗a1∗a∗a2∗...∗a∗aϕ(n)≡a1∗a2∗...∗aϕ(n)(modn)
aϕ(n)∗a1∗a2∗...∗aϕ(n)≡a1∗a2∗...∗aϕ(n)(modn)
aϕ(n)∗a1∗a2∗...∗aϕ(n)−a1∗a2∗...∗aϕ(n)≡0(modn)
(aϕ(n)−1)∗a1∗a2∗...∗aϕ(n)≡0(modn)
由于(aϕ(n)−1)<n且ai与n互素,因此(aϕ(n)−1)=0,即aϕ(n)=1=a∗aϕ(n)−1,所以aϕ(n)−1是a的模逆元,如果n是素数,则aϕ(n)−1=an−2
方法2-扩展欧几里得算法
关于扩展欧几里得算法的详细介绍,可以参考这篇文章:最大公约数:扩展欧几里得算法
通过扩展欧几里得算法,可以求得ax+ny=gcd(a,n)=1,ax+ny≡ax≡1(modn),求得的x即为a的模拟元