扩展欧几里得 学习笔记(扩欧 || exgcd 入门)

什么是欧几里得算法?
简单点说, ( a , b ) = ( b , a (a,b)=(b,a (a,b)=(b,a m o d mod mod b ) b) b)

  • 什么是扩展欧几里得算法?

扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。除了计算 a a a b b b两个整数的最大公约数,此算法还能找到整数 x x x y y y(其中一个很可能是负数)。通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数 a a a b b b, 必存在有整数 x x x y y y 使得 a x + b y = ( a , b ) ax + by = (a,b) ax+by=(a,b)。有两个数 a , b a,b a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b)的整数解。

——————————————————————摘自百度百科

  • 如何正确使用欧几里得算法(exgcd)
    好的, 进入正题了。
    题意:求方程 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b) x , y x,y x,y的整数解。
    不妨设 a = b q + r a=bq+r a=bq+r,根据小学的说法, q q q是商 , r r r是余数,所以对于确定的 a a a b b b q q q r r r的值是唯一的。
    我们把问题通过欧几里得算法转化,即从 ( a , b ) (a,b) (a,b)转化到了 ( b , r ) (b,r) (b,r) r r r a a a m o d mod mod b b b),设求出方程 b x + r y = ( a , b ) bx+ry=(a,b) bx+ry=(a,b)的解为 x = x 0 , y = y 0 x=x_0,y=y_0 x=x0,y=y0,考虑将它变形到原式。
    怎么变形呢?
    将刚才的 a = b q + r a=bq+r a=bq+r代入 a x + b y = ( a , b ) ax+by=(a,b) ax+by=(a,b),即为
    x ( b q + r ) + b y = ( a , b ) x(bq+r)+by=(a,b) x(bq+r)+by=(a,b)
    去括号,得 x b q + x r + b y = ( a , b ) xbq+xr+by=(a,b) xbq+xr+by=(a,b)
    b b b提出来,得 b ( x q + y ) + x r = ( a , b ) b(xq+y)+xr=(a,b) b(xq+y)+xr=(a,b)
    你发现了什么?
    还没发现?拿上面的式子对比一下:
    因为
    b x 0 + r y 0 = ( a , b ) , bx_0+ry_0=(a,b), bx0+ry0=(a,b),
    b ( x q + y ) + x r = ( a , b ) b(xq+y)+xr=(a,b) b(xq+y)+xr=(a,b)
    所以
    b x 0 + r y 0 = b ( x q + y ) + x r bx_0+ry_0=b(xq+y)+xr bx0+ry0=b(xq+y)+xr
    x = y 0 , y = x 0 − y 0 q x=y_0,y=x_0-y_0q x=y0,y=x0y0q
    递归即珂,边界条件 ( b , 0 ) (b,0) (b,0)的解为 x = 1 , y = 0 x=1,y=0 x=1,y=0.

额,上面只是基础做法,下面还有

题意:给出 a , b , c a,b,c a,b,c,求方程 a x + b y = c ax+by=c ax+by=c的所有整数解。
我们知道,只有在 ( a , b ) ∣ c (a,b)|c (a,b)c时,这个方程才会有整数解。

因为 ( a , b ) ∣ c (a,b)|c (a,b)c,所以不妨设 k = c ( a , b ) k=\frac{c}{(a,b)} k=(a,b)c,根据等式性质,得
a x ′ k + b y ′ k = ( a , b ) × k ax'k+by'k=(a,b)\times k axk+byk=(a,b)×k
得出一组解为 x 1 = x ′ k , y 1 = y ′ k x_1=x'k,y_1=y'k x1=xk,y1=yk
那么解集就出来拉!
{ ( x , y ) ∣ x = x 1 + l × b ( a , b ) , y = y 1 − l × a ( a , b ) , l ∈ Z (x, y) | x=x_1+ l \times \frac{b}{(a,b)},y=y_1-l\times \frac{a}{(a,b)},l \in{\mathbb{Z}} (x,y)x=x1+l×(a,b)b,y=y1l×(a,b)a,lZ}

参照了几篇blog,在此感谢QwQ

好像一点也不易懂

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值