什么是欧几里得算法?
简单点说,
(a,b)=(b,a
mod
b)
扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展。除了计算
a和
b两个整数的最大公约数,此算法还能找到整数
x
y(其中一个很可能是负数)。通常谈到最大公因子时, 我们都会提到一个非常基本的事实: 给予二整数
a与
b, 必存在有整数
x 与
y 使得
ax+by=(a,b)。有两个数
a,b,对它们进行辗转相除法,可得它们的最大公约数——这是众所周知的。然后,收集辗转相除法中产生的式子,倒回去,可以得到
ax+by=(a,b)的整数解。
——————————————————————摘自百度百科
- 如何正确使用欧几里得算法(exgcd)
好的, 进入正题了。
题意:求方程
ax+by=(a,b)
x,y的整数解。
不妨设
a=bq+r,根据小学的说法,
q是商 ,
r是余数,所以对于确定的
a和
b,
q和
r的值是唯一的。
我们把问题通过欧几里得算法转化,即从
(a,b)转化到了
(b,r)(
r为
a
mod
b),设求出方程
bx+ry=(a,b)的解为
x=x0,y=y0,考虑将它变形到原式。
怎么变形呢?
将刚才的
a=bq+r代入
ax+by=(a,b),即为
x(bq+r)+by=(a,b)
去括号,得
xbq+xr+by=(a,b)
把
b提出来,得
b(xq+y)+xr=(a,b)
你发现了什么?
还没发现?拿上面的式子对比一下:
因为
bx0+ry0=(a,b),
b(xq+y)+xr=(a,b)
所以
bx0+ry0=b(xq+y)+xr
x=y0,y=x0−y0q
递归即珂,边界条件
(b,0)的解为
x=1,y=0.
额,上面只是基础做法,下面还有
题意:给出
a,b,c,求方程
ax+by=c的所有整数解。
我们知道,只有在
(a,b)∣c时,这个方程才会有整数解。
因为
(a,b)∣c,所以不妨设
k=(a,b)c,根据等式性质,得
ax′k+by′k=(a,b)×k
得出一组解为
x1=x′k,y1=y′k
那么解集就出来拉!
{
(x,y)∣x=x1+l×(a,b)b,y=y1−l×(a,b)a,l∈Z}
参照了几篇blog,在此感谢QwQ
好像一点也不易懂