方程 ax + by = gcd(a , b) 的一组特解(x1,y1)
#include<bits/stdc++.h>
using namespace std;
int extgcd(int a,int b,int &x,int &y){
int ans=a;
if(b){
ans=extgcd(b, a%b, y, x);
y-=(a/b)*x;
}
else {
x=1;
y=0;
}
return ans;
}
int main(){
int a,b;
while(~scanf("%d%d",&a,&b)){
int x,y;
extgcd(a,b,x,y);
printf("%d *a ",x);
if(y>=0)cout<<"+";
printf(" %d *b = %d\n",y,extgcd(a,b,x,y));
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define MAX 100005
int x,y;
int a,b,c,d;
int numa[MAX],numb[MAX];
int main(){
scanf("%d%d",&x,&y);
a=x>y?x:y;
b=x<y?x:y;
c=a/b;
d=a%b;
numa[0]=numb[1]=1;
numb[0]=numa[1]=0;
int index=1;
while(d){
index++;
printf("%5d =%5d* %2d %c %5d\n",a,b,c,d>=0?'+':NULL,d);
numa[index]=numa[index-2]-numa[index-1]*c;
numb[index]=numb[index-2]-numb[index-1]*c;
a=b;
b=d;
c=a/b;
d=a%b;
}
cout<<numa[index]<<"a ";
if(numb[index]>=0)cout<<'+';
cout<<" "<<numb[index]<<"b = 1";
return 0;
}