关于欧几里得算法与裴蜀定理的证明

前言:

因为某次考试订正 T4,用到了 exCRT,然后发现我和 lws 不会 exgcd……

所以来把 gcd 到 exgcd 重新学一下,就写了这篇 trick。

欧几里得算法:

求证:

gcd(a,b)={gcd(b,amodb)b0ab=0

记:

a=qb+r,其中 q=abr=amodb

d=gcd(b,r),且 b=dxr=dyxy

证明:

b=0 时,由定义 gcd(a,b)=a,之后我们考虑 b0 的情况。

显然 gcd(a,b)=gcd(qb+r,b)=dgcd(qx+y,x)

gcd(qx+y,x)=g,此时 gx,且 gqx+y,即 qy

然而 xy,所以 g=1

gcd(a,b)=dgcd(qx+y,x)=d

裴蜀定理:

用于求解形如 ax+by=gcd(a,b) 的方程的特解。

过程:

bx0+(amodb)y0=gcd(b,amodb)ax1+by1=gcd(a,b)

由欧几里得算法,我们可以联立两方程:bx0+(amodb)y0=ax1+by1

同样记 a=qb+r,则 bx0+(aqb)y0=ax1+by1

拆下系数:ay0+b(x0qy0)=ax1+by1

那么可得 x1=y0,y1=x0aby0

边界即为 ax+0y=a,此时取 x=1,y=0 即可(当然 y 其实可以为任意整数)。

求解通解:

ax+by=1 中,我们的通解为 x=x0+db,y=y0da

而对于 ax+by=gcd(a,b) ,此时的通解应表示为 x=x0+dbgcd(a,b),y=y0dagcd(a,b),此处 x0,y0 为一组特解。

证明:

带入 x,y 到原方程,可得:a(x0+dbgcd(a,b))+b(y0dagcd(a,b))=ax0+by0+adbgcd(a,b)adbgcd(a,b)=gcd(a,b)

故该形式确实表示了 ax+by=gcd(a,b) 的一组解。

然后考虑任意两组解 x1,y1x2,y2

作差可以得到 a(x1x2)+b(y1y2)=0,即 a(x1x2)=b(y1,y2)

提出 gcd(a,b),得到 agcd(a,b)(x1x2)=bgcd(a,b)(y1y2)

由于 agcd(a,b)bgcd(a,b),所以 agcd(a,b)(y1y2)bgcd(a,b)(x1x2)

故该形式可以表示出 ax+by=gcd(a,b) 的所有解。

进一步扩展

ax+by=cgcd(a,b)c 时同样被确定有解。

考虑在 ax+by=gcd(a,b) 两边同时乘上一个 cgcd(a,b)

得到 acgcd(a,b)x+bcgcd(a,b)y=c

这个方程的通解形式与上面的方程相同,这里由于 agcd(a,b)bgcd(a,b),所以 gcd(acgcd(a,b),bcgcd(a,b))=c

这个通解就写为 x+dbcgcd(a,b)c,ydacgcd(a,b)c,,带入化简可得到 x+dbgcd(a,b),ydagcd(a,b)

注意上面的 x 是在 ax+by=gcd(a,b) 的解乘上 cgcd(a,b) 后得到的。

posted @   LQ636721  阅读(55)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示