扩展欧几里得算法是欧几里得(又叫辗转相除法)的扩展。除了计算a、b两个整数的最大公约数,此算法还能找到整数x、y(其中一个很可能是负数)为:ax+by=gcd(a,b)的解。
证明:
设x1,y1是方程:ax+by=gcd(a,b)的解
已知:gcd(a,b)=gcd(b,a%b);
设x2,y2是方程:ax+by=gcd(b,a%b)的解
可得:bx2+(a%b)y2=gcd(b,a%b)=ax1+by1
整理得:ay2+b(x2-a/b*y2)=ax1+by1;
对比得其中一组特解:x1=y2,y1=x2-a/b*y2;
代码模板:
int ex_gcd(int a,int b,int &x,int &y) { if(b==0){ x=1,y=0; return a; } else { int r=ex_gcd(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return r; } }
浙公网安备 33010602011771号