在群 G G 中, ∀a∈G,∃a′∈G, s.t.aa′=e ∀ a ∈ G , ∃ a ′ ∈ G , s . t . a a ′ = e ,其中 e e 为 G G 的单位元
p p 为素数,记 a⋅b=a×bmodp a ⋅ b = a × b mod p
在群 N N 中, ∀a∈N,∃a′∈N, s.t.aa′=e=1 ∀ a ∈ N , ∃ a ′ ∈ N , s . t . a a ′ = e = 1
则称 a′ a ′ 是 a a 关于 modp的逆元 mod p 的 逆 元 ,记为 inv[a] i n v [ a ]
对于 a∈N a ∈ N ,有且仅有一个 a′ a ′ , s.t.aa′≡1modp s . t . a a ′ ≡ 1 mod p
∀a,b∈N,inv[a]×inv[b]≡inv[a×b]modp ∀ a , b ∈ N , i n v [ a ] × i n v [ b ] ≡ i n v [ a × b ] mod p
inv[k]≡−(p/k)×inv[pmodk](modp) i n v [ k ] ≡ − ( p / k ) × i n v [ p mod k ] ( mod p )
a/b=a×inv[b]modp a / b = a × i n v [ b ] mod p
从 1 1 到 p−1 p − 1 枚举 a′ a ′ 的值,转为判断性问题,判断 aa′modp a a ′ mod p 是否为1
假定 p p 是素数,且 gcd(a,p)=1 g c d ( a , p ) = 1 ,那么 ap−1≡1modp a p − 1 ≡ 1 mod p
那么对于乘法逆元 a×ap−2≡1modp a × a p − 2 ≡ 1 mod p
所以 inv[a]≡ap−2modp i n v [ a ] ≡ a p − 2 mod p ,可以使用快速幂来求逆元
对于 aa′≡1 a a ′ ≡ 1 ,我们可以构建方程 ax+py=1 a x + p y = 1 同时令 a′=x a ′ = x ,那么就将问题转化为求 x,y x , y 了。
对于 a,p a , p 的最大公约数,并且求解 x,y x , y
假设当前的状态为 (a,b) ( a , b )
1. 当 b=0 b = 0 时, gcd(a,b)=a g c d ( a , b ) = a ,所以 x=1,y=0 x = 1 , y = 0
2. 当 b≠0 b ≠ 0 时,我们先执行 gcd(b,amodb) g c d ( b , a mod b )
现在 xb+y(amodb)=1→x×b+y×a−(a/b)y×b=1→ya+[x−(a/b)y]b=1 x b + y ( a mod b ) = 1 → x × b + y × a − ( a / b ) y × b = 1 → y a + [ x − ( a / b ) y ] b = 1
那么我们构造出的 x′,y′ x ′ , y ′ 作为新的 x,y x , y 满足 ax+by=1 a x + b y = 1 即 x′=y,y′=x−(a/b)y x ′ = y , y ′ = x − ( a / b ) y ,求出 x x
aφ(p)≡1modp a φ ( p ) ≡ 1 mod p ,则 aφ(p)−1 a φ ( p ) − 1 是 a a 的逆元
其中 φ(p) φ ( p ) 是小于 p p 并且与 p p 互质的个数
已知 inv[1]=1 i n v [ 1 ] = 1
假设已经求出 inv[i],∀i<k i n v [ i ] , ∀ i < k ,求 inv[k] i n v [ k ]
设 p=ak+b,0≤b<k p = a k + b , 0 ≤ b < k
b×inv[b]=(p−ak)×inv[b]=−ak×inv[b]=k×(−a×inv[b])=1modp b × i n v [ b ] = ( p − a k ) × i n v [ b ] = − a k × i n v [ b ] = k × ( − a × i n v [ b ] ) = 1 mod p
则 inv[k]=−a×inv[b]=−(p−/k)×inv[pmodk]modp i n v [ k ] = − a × i n v [ b ] = − ( p − / k ) × i n v [ p mod k ] mod p