数论:关于逆元
之前写过一篇逆元的文章,但是由于我掌握不牢,所以现在连不定方程都不会解,在此进行补充升华(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).
\[
\binom {x=y_0}{y=x_0-y_0*\frac{a}{b}(向下取整)}
\]
这样就能写出递归式,从两个互质的数举例:(107,37).
(107,37)->(37,33)->(33,4)->(4,1)->(1,0)->[1,1]->[1,-3]->[-3,25]->[25,-28]->[-28,81]
所以通过这种方法,就可以求出一对互质数的逆元.
来源:https://www.cnblogs.com/Wild-Donkey/p/12366417.html