扩展欧几里得算法实际上就是对于ax+by=gcd(a,b),一定有一组整数解x,y使其成立
对于这个式子的证明,可以采用数学归纳法进行实现,先证明当n= 1时命题成立。
假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)
然后命题得证。
在这个式子里,也就是当b=0是一定成立,假设bx+(a%b)y=gcd(b,a%b)成立,证明ax+by=gcd(a,b)成立
实际上已知bx1+(a%b)y1=gcd(b,a%b)需要证明ax2+by2=gcd(a,b)
我们令a=kb+c,也就是c是a%b.移项得:c=a-kb.将这个式子代入到已知式子:
bx1+(a-kb)y1=gcd(b,a%b),
化简可得ay1+b*(x1-ky1)=gcd(b,a%b)=gcd(a,b)及当x2=y1 y2=x1-ky1时满足条件
k=a/b;
所以程序也很简单
void exgcd(int a,int b,int &x,int &y,int &d){
if(b==0) d=a,x=1,y=0;
else exgcd(b,a%b,x,y,d),t=x,x=y,y=t-a/b*y;
}