推理过程:
ax+by=gcd(a,b)
求解 x,y的方法的理解
设 a>b。
①显然当
b=0
,
gcd(a,b)=a
。此时 x=1,y=0;
②
a>b>0
时
设
ax1+by1=gcd(a,b)
bx2+(amodb)y2=gcd(b,amodb)
;
根据朴素的欧几里德原理有
gcd(a,b)=gcd(b,amodb)
;
则:
ax1+by1=bx2+(amodb)y2
;
即:
ax1+by1=bx2+(a−[ab]∗b)y2=ay2+bx2−[ab]∗by2
也就是
ax1+by1==ay2+b(x2−[aby2)
;
根据恒等定理得:
x1=y2
;
y1=x2−[a/b]∗y2
;
这样我们就得到了求解
x1,y1
的方法:
x1,y1
的值基于
x2,y2
.
上面的思想是以递归定义的
∵ gcd 不断的递归求解一定会有个时候
b=0
∴递归可以结束。
代码:
int exgcd(int a,int b,int &x,int &y)
{
if (b==0)
{
x=1,y=0;
return a;
}
int q=exgcd(b,a%b,y,x);
y-=a/b*x;
return q;
}