在辗转相除gcd(a,b)的基础上加以扩展
可以得到使等式 a*x+b*y=1 成立的解
#include<iostream>
using namespace std;
int x,y;
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a % b);
}
int exgcd(int a,int b,int &x,int &y)
{
if(b==0) { x=1, y=0; return a; }
int res=exgcd(b,a%b,y,x);
y-= a/b*x;
return res;
}
int main()
{
int a,b;
while(cin>>a>>b)
{
if(a<b) swap(a,b);
printf("%d = %d*%d + %d*%d \n",exgcd(a,b,x,y),x,a,y,b);
}
}