先来小力推导一波EX_GCD
(1) : a*x1+b*y1=gcd(a,b) b*x2+(a%b)*y2=gcd(b,a%b)
可得(2) : a*x1+b*y1=b*x2+(a%b)*y2
因为 a%b=a-(a/b)*b
在得(3) : a*x1+b*y1=b*x2+(a-(a/b)*b)*y2
所以:(4) : a*x1+b*y1=b*x2+a*y2-(a/b)*b*y2
所以可得 x1=y2 , y1=x2-a/b*y2
这样就推完了
这样可以求出 ax+by=gcd(a,b)的一组解(x,y) 如3 10 可求出 -3, 1 ; 6 8可求出-1,1; 5 6 求出 -1 , 1;
这篇讲的很好点击打开链接
#include<bits/stdc++.h>
using namespace std;
int a,b,x,y;
inline int ex_gcd(int a,int b,int &x,int &y){
if(b==0){
x=1;
y=0;
return a;
}
int res=ex_gcd(b,a%b,x,y);
int oo=x;
x=y;//x1=y2
y=oo-(a/b)*y;//这是推出的y1=(x2-(a/b)*y2)
return res;
}
int main(){
while(scanf("%d%d",&a,&b)!=EOF){
x=0;y=0;
ex_gcd(a,b,x,y);
printf("%d %d\n",x,y);
}
}