辗转相除法:求俩个数的最大公约数。
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
扩展欧几里得算法:是辗转相除法的扩展,求 ax+by=gad(a,b) 的解。
int extgcd(int a,int b,int& x,int& y){
int d = a;
if(b!=0){
d = extgcd(b,a%b,y,x);
y -= (a/b)*x;
}else{
x = 1;y = 0;
}
return d;
}
#include
//辗转相除法
int gcd(int a,int b){
if(b==0) return a;
return gcd(b,a%b);
}
//扩展欧几里得算法,及扩展辗转相除法
int extgcd(int a,int b,int& x,int& y){
int d = a;
if(b!=0){
d = extgcd(b,a%b,y,x);
y -= (a/b)*x;
}else{
x = 1;y = 0;
}
return d;
}
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
int x,y;
printf("%d*%d+%d*%d=%d\n",a,x,b,y,extgcd(a,b,x,y));
}
return 0;
}