逆元的定义
如果 gcd ( a , b ) = 1 \gcd(a, b)=1 gcd(a,b)=1,则b在mod a下有乘法逆元(设 b < a b< a b<a),即存在一个 x x x( x < a x<a x<a),使得 b x ≡ 1 m o d a bx \equiv 1 \bmod a bx≡1moda, x x x就是 b b b在 m o d a \bmod a moda下的乘法逆元。
欧几里得(Euclid)算法
欧几里得算法如下:设
a
,
b
a,b
a,b是任意两个正整数,记
r
0
=
a
,
r
1
=
b
r_{0} =a,r_{1}=b
r0=a,r1=b,反复用辗转相除法,有:
r
0
=
r
1
q
1
+
r
2
,
0
≤
r
2
<
r
1
r_{0} =r_{1}q_{1} +r_{2}, 0\le r_{2}< r_{1}
r0=r1q1+r2,0≤r2<r1
r
1
=
r
2
q
2
+
r
3
,
0
≤
r
3
<
r
2
r_{1} =r_{2}q_{2} +r_{3}, 0\le r_{3}< r_{2}
r1=r2q2+r3,0≤r3<r2
⋯
\cdots
⋯
r
n
−
1
=
r
n
q
n
+
r
n
+
1
,
r
n
+
1
=
0
r_{n-1} =r_{n}q_{n} +r_{n+1}, r_{n+1}=0
rn−1=rnqn+rn+1,rn+1=0
由于
r
1
=
b
>
r
2
>
⋯
>
r
n
>
r
n
+
1
≥
0
r_{1 }=b>r_{2}>\cdots >r_{n}>r_{n+1}\ge 0
r1=b>r2>⋯>rn>rn+1≥0,经过有限步后,必然存在n使得
r
n
+
1
=
0
r_{n+1}=0
rn+1=0。可得到
gcd
(
a
,
b
)
=
r
n
\gcd(a, b) =r_{n}
gcd(a,b)=rn,即辗转相除法中最后一个非0余数就是
a
a
a和
b
b
b的最大公因子。
例题如下:
求
gcd
(
18
,
12
)
\gcd(18, 12)
gcd(18,12)
18
=
12
×
1
+
6
18=12×1+6
18=12×1+6
12
=
6
×
2
+
0
12=6×2+0
12=6×2+0
所以
gcd
(
18
,
12
)
=
6
\gcd(18, 12)=6
gcd(18,12)=6。
推广的欧几里得算法
推广的欧几里得算法可以用来求解一个数关于另一个数的乘法逆元。
例题如下:
求解5关于模7的乘法逆元
x
x
x。
5
x
≡
1
m
o
d
7
5x \equiv 1 \bmod 7
5x≡1mod7
即满足:
5
x
=
7
k
+
1
5x= 7k+1
5x=7k+1
7
=
5
×
1
+
2
7= 5×1+2
7=5×1+2,则
2
=
7
−
5
×
1
2= 7-5×1
2=7−5×1
5
=
2
×
2
+
1
5= 2×2+1
5=2×2+1
得到:
5
=
2
×
(
7
−
5
)
+
1
5= 2×(7-5)+1
5=2×(7−5)+1
5
=
7
×
2
−
5
×
2
+
1
5= 7×2-5×2+1
5=7×2−5×2+1
5
×
3
=
7
×
2
+
1
5×3= 7×2+1
5×3=7×2+1
对比
5
x
=
7
k
+
1
5x= 7k+1
5x=7k+1得到
x
=
3
x= 3
x=3。
所以5对于模7的乘法逆元是3。