先來小力推導一波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);
}
}