文章目录
介绍
非零实数 a ∈ R a \in R a∈R的乘法你愿就是它的倒数 a − 1 a^{-1} a−1,类似的,数论中也可以定义一个整数a在模m意义下的逆元 a − 1 m o d m a^{-1} \mod m a−1modm,或简单地记作 a − 1 a^{-1} a−1,这既是模逆元(Modular Multiplicative Inverse),也称作数论倒数。模逆元存在的充要条件是a和m互质,即
g c d ( a , m ) = 1 gcd(a, m) = 1 gcd(a,m)=1
算法
是否存在模逆元
对于是否存在模逆元,可以通过欧几里得算法判断两个数(a,m)是否互质。计算方式如下:
m = q 1 × a + r 1 a = q 2 × r 1 + r 2 r 1 = q 3 × r 2 + r 3 ⋯ ⋯ r k − 2 = q k × r k − 1 + 1 r k − 1 = q k + 1 × 1 + 0 \begin{align} m & = q_1 \times a + r_1 \\ a & = q_2 \times r_1 + r_2 \\ r_1 & = q_3 \times r_2 + r_3 \\ \cdots & \cdots \\ r_{k-2} & = q_k \times r_{k-1} + 1 \\ r_{k-1} & = q_{k+1} \times 1 + 0 \end{align} mar1⋯rk−2rk−1=q1×a+r1=q2×r1+r2=q3×r2+r3⋯=qk×rk−1+1=qk+1×1+0
流程执行按照使用大数除以小数,不断取余,直到余数为0。
如何求取模逆元
使用回代思想,把 1 表示成 a 和 m 的组合。起始位从余数=1(上述式子中的式5)开始进行反推,然后不断把较小的余数用上一行式子替换。演算过程如下:
1 = r k − 2 − q k × r k − 1 1 = r k − 2 − q k × ( r k − 3 − q k − 1 × r k − 2 ) 1 = ⋯ 1 = s × m + t × a \begin{align} 1 & = r_{k-2} - q_k \times r_{k-1} \\ 1 & = r_{k-2} - q_k \times (r_{k-3} - q_{k-1} \times r_{k-2}) \\ 1 & = \cdots \\ 1 & = s \times m + t \times a \end{align} 1111=rk−2−qk×rk−1=rk−2−qk×(rk−3−qk−1×rk−2)=⋯=s×m+t×a
对于式中, s × m s \times m s×m 的模运算为0,则只需要对进行 t × a t \times a t×a,其中,就是候选逆元。如果候选逆元为负数,则需要加m的整数倍,保障逆元的取值范围为[0, m)。
示例
示例1
a = 15,m = 32,求解15在mod 32 下的模逆元。
是否互质
32 = 2 × 15 + 2 15 = 7 × 2 + 1 2 = 2 ∗ 1 + 0 \begin{align*} 32 & = 2 \times 15 + 2 \\ 15 & = 7 \times 2 +1 \\ 2 & = 2*1 + 0 \end{align*} 32152=2×15+2=7×2+1=2∗1+0
根据上述运算,我们判断15与32互质。存在模逆元。
模逆元求解
1 = 15 − 7 × 2 1 = 15 − 7 × ( 32 − 2 × 15 ) 1 = 15 − 7 × 32 + 14 × 15 1 = 15 × 15 − 7 × 32 \begin{align*} 1 & = 15 - 7 \times 2 \\ 1 & = 15 - 7 \times (32- 2 \times 15) \\ 1 & = 15 - 7 \times 32 + 14 \times 15 \\ 1 & = 15 \times 15 - 7 \times 32 \end{align*} 1111=15−7×2=15−7×(32−2×15)=15−7×32+14×15=15×15−7×32
− 7 × 32 - 7 \times 32 −7×32 在mod 32 的运算下为0,且 15 ∈ [ 0 , 32 ) 15 \in [0, 32) 15∈[0,32),则可以判定为15在mod 32的模逆元为15本身。
求算模逆元正确性
15 × 15 = 225 = 7 × 32 + 1 15 \times 15 = 225 = 7 \times 32 +1 15×15=225=7×32+1
示例2
a = 8,m = 49,求解8在mod 49 下的模逆元。
是否互质
49 = 6 × 8 + 1 8 = 8 × 1 + 0 \begin{align*} 49 & = 6 \times 8 + 1 \\ 8 & = 8 \times 1 + 0 \end{align*} 498=6×8+1=8×1+0
根据上述运算,我们判断8与49互质。存在模逆元。
模逆元求解
KaTeX parse error: Expected 'EOF', got '&' at position 3: 1 &̲ = 49 - 6 \time...
49 在mod 49 的运算下为0,因为 − 6 ∉ [ 0 , 49 ) -6 \notin [0,49) −6∈/[0,49),所以-6不为8在mod 49 下的模逆元。此时,我们需要进行m(49)的运算, − 6 + 49 = 43 -6 + 49 =43 −6+49=43,则可以判定为8的在mod 49 模逆元为43。
求算模逆元正确性
8 × 43 = 344 = 7 × 49 + 1 8 \times 43 = 344 = 7 \times 49 +1 8×43=344=7×49+1