数论:关于逆元

数论:关于逆元

之前写过一篇逆元的文章,但是由于我掌握不牢,所以现在连不定方程都不会解,在此进行补充升华(buyiding)

这就是逆元的简易求法

若ax+by=1.

那么x就是a对模b的逆元,同理,y就是b对模a的逆元.

这时,就要用到Exgcd来快速求出逆元.

在此之前,逆元存在的前提是a,b互质.(如果不互质,那么等号右边就换成gcd(a,b)).

这时通过欧几里得算法,a=gcd(a,b)=1时,等式化为x=1.

也就是说1对模0的逆元是1.

我们知道a,b化为1,0时,是辗转相除的到的,那么对于任意一对a,b,满足a=bm+n.

b对模a的逆元可以分解为b对模(mb+n)的逆元.转化为yb%(mb+n)=1.

不难看出,对于mb+n的mb项,yb%mb永远不可能出现1.那么1只能通过%n得到.这时候就是b模n的逆元x0的作用.

设x0,使x0b%n=1.又因为a=mb+n,所以不光是n,y(b模a的逆元)里面还要考虑mb的问题,而mb是b的倍数,每个n会和m个b同时出现,n的数量成了解决问题的关键.(一开始,可能会想到x0b/n,但是写出公式后发现这样会出现0循环(因为x0可能为0))

引出n对模b的逆元y0.

y0n%b=1.但是我是用y个b取模(mb+n),n的数量要求n(x0b/n)(向下取整)=x0b-1,这时,就要去n和某个数的乘积%b=-1(也就是b-1).

又因为-y0n%b=b-1.

所以这里n的数量就是-y0

刚刚说到一个a有一个n,所以这也是a的数量,y0a里面一共有y0m个b.

加上一开始求的x0b%n=1.

总结一下,x0b%n=1.-y0mb%mb=0.

b对模a的逆元(y)也就是b对模n的逆元(x0)减去n对模b的逆元(b0)乘a与b的商(m)

那么怎么求出a对模b的逆元呢?

根据逆元的定义,y0n%b=1.

如此,y0a%b=y0mb%b+y0n%b=0+1=1.

a对模b的逆元(x)也就是n对模b的逆元(y0).

(x=y0y=x0y0ab())

这样就能写出递归式,从两个互质的数举例:(107,37).

(107,37)->(37,33)->(33,4)->(4,1)->(1,0)->[1,1]->[1,-3]->[-3,25]->[25,-28]->[-28,81]

所以通过这种方法,就可以求出一对互质数的逆元.

posted @   Wild_Donkey  阅读(390)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示