【学习笔记】逆元

【0】逆元的定义:

逆元又称模意义下的倒数。

一个正整数 a 在模 p 的逆元 x 满足 ax1(modp),我们一般取最小的满足条件的正整数 x 作为 a 的逆元,记作 a1inv(a)

我们把这个同余方程转换一下,变成 ax+py=1。由裴蜀定理,该方程当且仅当 gcd(a,p)=1,即 a,p 互质时有解。

也就是说,当 (a,p)>1 时,不存在 ap 意义下的逆元。

接下来,我们探讨逆元的求法。

【1】扩欧(exgcd)的求法。

上文说了,求逆元的线性同余方程 ax1(modp) 可以转化为这个线性不定方程 ax+py=1,当且仅当 gcd(a,p)=1 时有解,那么这个不定方程就是 ax+py=gcd(a,p),显然可以用扩欧解。复杂度 O(logmax(a,p))

【2】费马小定理求法:

提前声明:该算法只适用于 p 为质数的情况。

费马小定理:当 p 为质数,(a,p)=1 时,ap11(modp)

又因为当 (a,p)>1 时,不存在逆元,这一点很好特判。因为 p 为质数,所以当 (a,p)>1 时,显然 p|a。所以,当 p 为质数时一定可以用这种方法。

我们发现 ap1=a timesap21(modp),由同余的性质,我们只需通过快速幂求出 ap2modp 即为 ap 意义下的逆元,复杂度 O(logp)

【3】线性递推

由逆元的定义,易知 inv(i)=inv(imodp),所以我们不妨设 i<p

k=pi,r=pmodi,则 p=k×i+rk 就是 p÷i 的商, r 为余数)。

所以 k×i+r0(modp),由同余的性质,两边可以同除以 ir,得到 k×r1+i10(modp),即 k×inv(r)+inv(i)0(modp)

k×inv(r) 移到右边,得到 inv(i)k×inv(r)(modp),把 k,r 代入得 inv(i)=(pi×inv(pmodi))modp

因为 pmodi<i,所以这个是可以递推的。

posted @   5t0_0r2  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示