逆
同余方程
a
x
≡
1
(
m
o
d
m
)
a x \equiv 1 \pmod {m}
ax≡1(modm) 的解,为
a
a
a模
m
m
m的逆,记为
a
−
1
a^{-1}
a−1。上一篇说到这个同余方程有解的条件是
g
c
d
(
a
,
m
)
=
1
gcd(a,m)=1
gcd(a,m)=1,以下说到的逆都是在这个条件下。
求逆可以用扩展欧几里得或者费马小定理(条件:
m
m
m是素数)
逆元与除法取模
我们知道取模操作满足以下性质
(a+b)mod m = ((a mod m)+(b mod m))mod m
(a-b)mod m = ((a mod m)-(b mod m))mod m
(a*b)mod m = ((a mod m)*(b mod m))mod m
但是对除法取模进行类似的操作是错误的,例如
(
60
/
4
)
(
m
o
d
25
)
=
15
(60/4) \pmod{25}= 15
(60/4)(mod25)=15
(
(
60
(
m
o
d
25
)
)
/
(
4
(
m
o
d
25
)
)
)
(
m
o
d
25
)
=
2
((60 \pmod{25})/(4 \pmod{25})) \pmod{25} = 2
((60(mod25))/(4(mod25)))(mod25)=2
这里就需要用到逆元,
4
4
4 模
25
25
25 的逆是
19
19
19
(
60
∗
19
)
(
m
o
d
25
)
=
1140
(
m
o
d
25
)
=
15
(60*19)\pmod{25}=1140\pmod{25}=15
(60∗19)(mod25)=1140(mod25)=15
设
b
b
b模
m
m
m的逆是
d
d
d,所以
b
∗
d
(
m
o
d
m
)
=
1
b*d\pmod{m} = 1
b∗d(modm)=1
(
a
b
)
(
m
o
d
m
)
=
(
a
b
)
(
m
o
d
m
)
∗
(
b
d
)
(
m
o
d
m
)
=
(
a
b
b
d
)
(
m
o
d
m
)
=
(
a
d
)
(
m
o
d
m
)
(\frac{a}b)\pmod{m} =(\frac{a}b)\pmod{m}*(bd)\pmod{m}=\left(\frac{a}bbd\right)\pmod{m}=(ad)\pmod{m}
(ba)(modm)=(ba)(modm)∗(bd)(modm)=(babd)(modm)=(ad)(modm)
把除法取模转化成乘法取模
逆元与求解二元一次线性方程 a x + m y = b ( a x ≡ b ( m o d m ) ) ax+my=b(a x \equiv b\pmod {m}) ax+my=b(ax≡b(modm))
得到逆之后就可以求形如
a
x
≡
b
(
m
o
d
m
)
a x \equiv b\pmod {m}
ax≡b(modm)的任意同余方程
令
a
′
a'
a′为
a
a
a模
m
m
m的逆,
a
′
a
≡
1
(
m
o
d
m
)
a'a\equiv1\pmod{m}
a′a≡1(modm)
在
a
x
≡
b
(
m
o
d
m
)
a x \equiv b\pmod {m}
ax≡b(modm)的左右同乘以
a
′
a'
a′,得到
a
a
′
x
=
a
′
b
(
m
o
d
m
)
,
x
≡
a
′
b
(
m
o
d
m
)
aa'x=a'b\pmod{m},x\equiv a'b\pmod{m}
aa′x=a′b(modm),x≡a′b(modm)
例如求 6 x ≡ 40 ( m o d 23 ) 6x\equiv40\pmod{23} 6x≡40(mod23) , 6 ,6 ,6模 23 23 23的逆是 4 4 4,所以 x = 4 ∗ 40 ( m o d 23 ) = 22 x=4*40\pmod{23}=22 x=4∗40(mod23)=22
转一个代码注释
/*
--------------------佛祖保佑,永无bug--------------------
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||- \
| | \\\ - /// | |
| \_| ''\-/'' | |
\ .-\__ `-` ___/-. /
___`. .' /-.-\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=-='
*/