乘法逆元的一些求法

逆元

广义的来讲,对于任何域中的元素,有乘法运算和单位元 I I I,如果对于该域中的元素 A A A,存在另一个元素 A ′ A' A,且满足 A × A ′ = I A\times A'=I A×A=I,那么 A ′ A' A就是 A A A的逆元。

这里我们只讨论在整数域里的逆元,也就是当 A ∈ Z A\in \rm Z AZ I = 1 I=1 I=1,其实这里的逆元 A ′ = 1 A A'=\frac{1}{A} A=A1,但是我们要在模的意义下讨论它的求法。


在取模意义下,我们只需求出一个数 i n v inv inv,是的这个数与 1 A \frac{1}{A} A1同余即可,那么这个数 i n v inv inv就是 A A A在取模意义下的逆元。

费马小定理

内容:对于 x x x,在模 p , p ∈ P 质数 p,p\in \mathbb{P}\text{质数} p,pP质数的意义下,有 x p − 1 ≡ 1 ( m o d   p ) x^{p-1}\equiv 1(mod\ p) xp11(mod p)

我们变换一个形式,左右同时除以 x x x,就是 x p − 2 ≡ 1 x ( m o d   p ) x^{p-2}\equiv \frac{1}{x}(mod\ p) xp2x1(mod p),那么我们就发现 x p − 2 x^{p-2} xp2 1 x \frac{1}{x} x1是同余的,那么 x p − 2 x^{p-2} xp2就是 x x x的逆元了。

费马小定理证明:
  1. 用欧拉定理直接证明,这个就后面再说。
  2. 我们用剩余系来看:

引理1:假设 a a a 1 ∼ p − 1 1\sim p-1 1p1内的一个数,那么 a , 2 a , 3 a , ⋯   , ( p − 1 ) a a,2a,3a,\cdots,(p-1)a a,2a,3a,,(p1)a可以在模 p p p的意义下不重复的取遍 1 ∼ p − 1 1\sim p-1 1p1的值。引理1的证明-这里面有

那么我们将 a , 2 a , ⋯   , ( p − 1 ) a a,2a,\cdots,(p-1)a a,2a,,(p1)a乘起来,在模 p p p的意义下也就相当于把 1 , 2 , ⋯   , ( p − 1 ) 1,2,\cdots,(p-1) 1,2,,(p1)乘起来,那么可以得到 a p − 1 ( p − 1 ) ! ≡ ( p − 1 ) ! ( m o d   p ) a^{p-1}(p-1)!\equiv (p-1)!(mod\ p) ap1(p1)!(p1)!(mod p),然后两端同时除以 ( p − 1 ) ! (p-1)! (p1)!就可以得到 a p − 1 ≡ 1 ( m o d   p ) a^{p-1}\equiv 1(mod\ p) ap11(mod p)了,于是得证。

所以用费马小定理求取逆元的代码如下:

int inv(int a,int b=p-2){
	int ans=1;
	for(;b;b>>=1,a=(a*a)%p)if(b&1)ans=(ans*a)%p;
	return ans%p;
}

欧拉定理

内容:对于 x x x,在模 p p p p p p为任意与 x x x互质的数)意义下,有 x φ ( p ) ≡ 1 ( m o d   p ) x^{\varphi(p)}\equiv 1(mod\ p) xφ(p)1(mod p),其中 φ ( p ) \varphi(p) φ(p)为欧拉函数,表示 1 ∼ p − 1 1\sim p-1 1p1中与 p p p互质的个数。

那么我们知道,当 p p p为质数时就有 φ ( p ) = p − 1 \varphi(p)=p-1 φ(p)=p1,那么这个就是费马小定理了。

我们同样进行变形,可以得到 x φ ( p ) − 1 ≡ 1 x ( m o d   p ) x^{\varphi(p)-1}\equiv \frac{1}{x}(mod\ p) xφ(p)1x1(mod p),那么这里 x φ ( p ) − 1 x^{\varphi(p)-1} xφ(p)1就为 x x x的逆元了。

我们看,这里只要求 x , p x,p x,p互质,并没有要求 p p p为质数,所以欧拉定理求逆元比费马小定理求逆元应用更加广泛。

其他应用:当快速幂取模时,指数较大,但我们发现 x φ ( p ) ≡ 1 ( m o d   p ) x^{\varphi(p)}\equiv 1(mod\ p) xφ(p)1(mod p),所以我们可以将指数模了 φ ( p ) \varphi(p) φ(p),相当于除以很多个 1 1 1,然后再来快速幂。

欧拉定理的证明:

我们先令 x 1 ∼ x φ ( p ) x_1\sim x_{\varphi(p)} x1xφ(p) p p p的简化剩余系,再令 p i = x x i p_i=xx_i pi=xxi,其中 g c d ( x i , p ) = 1 gcd(x_i,p)=1 gcd(xi,p)=1

引理1. p i p_i pi之间两两在模 p p p的意义下不同余,同样 x i x_i xi也是。

  • 证明引理1. :

假设有 p i ≡ p j ( m o d   p ) p_i\equiv p_j(mod\ p) pipj(mod p),那么 p i − p j ≡ 0 ( m o d   p ) p_i-p_j\equiv 0(mod\ p) pipj0(mod p),我们将其变形得 x x i − x x j ≡ 0 ( m o d   p ) xx_i-xx_j\equiv 0(mod\ p) xxixxj0(mod p),也就是 x ( x i − x j ) ≡ 0 ( m o d   p ) x(x_i-x_j)\equiv 0(mod\ p) x(xixj)0(mod p),由于 g c d ( x , p ) = 1 gcd(x,p)=1 gcd(x,p)=1,所以只有在 x i − x j x_i-x_j xixj p p p的倍数时,这个式子才满足,而 x i , x j ≤ p x_i,x_j\leq p xi,xjp,那么它们相减就更加不可能为 p p p的倍数了,所以假设不成立,得证。

引理2. 每个 p i p_i pi p p p的结果都与 p p p互质。

  • 证明引理2. :

假设 p i ≡ r ( m o d   p ) , g c d ( p , r ) > 1 p_i\equiv r(mod\ p),gcd(p,r)>1 pir(mod p),gcd(p,r)>1
那么变形就有 x x i = k p + r xx_i=kp+r xxi=kp+r,也就是 x x i − k p = r xx_i-kp=r xxikp=r,我们可以得知 x x i xx_i xxi肯定与 p p p互质(因为 x , x i x,x_i x,xi分别与 p p p互质),那么我们令 d = g c d ( p , r ) d=gcd(p,r) d=gcd(p,r),那么变形可知 x x i = r + k p xx_i=r+kp xxi=r+kp,也就是 x x i = d ( w 1 + k w 2 ) 其中 ( d w 1 = r , d w 2 = p ) xx_i=d(w_1+kw_2)\text{其中}(dw_1=r,dw_2=p) xxi=d(w1+kw2)其中(dw1=r,dw2=p),那么 x x i xx_i xxi肯定有因子 d d d,那么它与 p p p就不互质了,所以假设不成立,得证。

  • 证明欧拉定理:

由1,2引理可得, ( x x 1 × x x 2 ⋯ × x x φ ( p ) ) ≡ ( x 1 × x 2 ⋯ × x φ ( p ) ) ( m o d   p ) (xx_1\times xx_2\cdots\times xx_{\varphi(p)})\equiv (x_1\times x_2\cdots\times x_{\varphi(p)})(mod\ p) (xx1×xx2×xxφ(p))(x1×x2×xφ(p))(mod p)

所以变形得 x φ ( p ) ∏ x i ≡ ∏ x i ( m o d   p ) x^{\varphi(p)}\prod x_i\equiv \prod x_i(mod\ p) xφ(p)xixi(mod p),两端同除就得 x φ ( p ) ≡ 1 ( m o d   p ) x^{\varphi(p)}\equiv 1(mod\ p) xφ(p)1(mod p)

扩展欧拉定理

内容
x k = { x k &VeryThinSpace; m o d &VeryThinSpace; φ ( p ) g c d ( x , p ) = 1 x k k &lt; φ ( p ) x k &VeryThinSpace; m o d &VeryThinSpace; φ ( p ) + φ ( p ) g c d ( x , p ) ≠ 1 , k ≥ φ ( p ) x ^ { k } = \left\{ \begin{array} { l l } { x ^ { k \bmod \varphi ( p ) } } &amp; { g c d ( x , p ) = 1 } \\ { x ^ { k } } &amp; { k &lt; \varphi ( p ) } \\ { x ^ { k \bmod \varphi ( p ) + \varphi ( p ) } } &amp; { g c d ( x , p ) \neq 1 , k \geq \varphi ( p ) } \end{array} \right. xk=xkmodφ(p)xkxkmodφ(p)+φ(p)gcd(x,p)=1k<φ(p)gcd(x,p)̸=1,kφ(p)


扩展欧几里得算法

内容 : exgcd(a,b,x,y) 【见详解于这里

这个也就是求方程 a x + b y = c ax+by=c ax+by=c的解。
那么我们将 a x ≡ 1 ( m o d   y ) ax\equiv 1(mod\ y) ax1(mod y)看作方程 a x + b y = 1 ax+by=1 ax+by=1,那么当 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1的时候,这个肯定有解,所以我们用扩展欧几里得定理求出 x x x,那么可以发现 a x ≡ 1 ( m o d   y ) ax\equiv 1(mod\ y) ax1(mod y)的,所以此时的 x x x就是在 m o d   y mod\ y mod y意义下的逆元。


线性递推求法

首先我们知道 1 1 1的逆元一定为 1 1 1,所以考虑 i i i的逆元( i &gt; 1 i&gt;1 i>1)。

对于模数为 p p p,我们令 p = i × k + d ( d &lt; i ) p=i\times k+d(d&lt;i) p=i×k+d(d<i),那么对于 k , d k,d k,d则有: k = ⌊ p i ⌋ , d = p   m o d   i k=\lfloor\frac{p}{i}\rfloor,d=p\ mod\ i k=ip,d=p mod i

那么原式可以写成 i × k + d ≡ 0 ( m o d   p ) i\times k+d\equiv 0(mod\ p) i×k+d0(mod p)

两边同时乘以 i − 1 × d − 1 i^{-1}\times d^{-1} i1×d1可得

d − 1 × k + i i − 1 ≡ 0 ( m o d   p ) d^{-1}\times k+i^{i-1}\equiv 0(mod\ p) d1×k+ii10(mod p)

那么 i − 1 ≡ ( − k × d − 1 ) ( m o d   p ) i^{-1}\equiv (-k\times d^{-1})(mod\ p) i1(k×d1)(mod p),所以将 k , d k,d k,d带回即有:

i − 1 ≡ − ⌊ p i ⌋ × ( p   m o d   i ) − 1 ( m o d   p ) i^{-1}\equiv -\lfloor\frac{p}{i}\rfloor\times(p\ mod\ i)^{-1}(mod\ p) i1ip×(p mod i)1(mod p)

由于 i i i以内的逆元已经求出,所以递推即可。

所以 i n v ( i ) = ( − p i ) × i n v ( p   m o d   i ) inv(i)=(-\frac{p}{i})\times inv(p\ mod\ i) inv(i)=(ip)×inv(p mod i)


参考大佬文章IN-Luogu

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VictoryCzt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值