#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b)/******递归******/
{
int tmp;
if(a < b)
{
tmp = a;
a = b;
b = tmp;
}
return b?gcd(b, a%b):a;
}
int gcd2(int a, int b)/******非递归****/
{
int tmp, mod;
if(a < b)
{
tmp = a;
a = b;
b = tmp;
}
if(b == 0)return a;//
while(b)
{
mod = a%b;
a = b;
b = mod;
}
return a;
}
int gcd3(int a, int b)
{
return b?gcd(b, a%b):a;
}
扩展欧几里得 可以求出 ax+by == gcd(a, b)的一个特解 x1, y1。
通解: x = x1+b/gcd(a,b)*t;
y = y2+a/gcd(a,b)*t;
int exgcd(int a, int b, int &x, int &y)
{
if(b == 0)
{
x = 1;
y= 0;
return a;
}
int r = exgcd(b, a%b, x, y);
int temp = y;
y = x- (a/b)*y;
x = temp;
return r;
}
int main()
{
int a, b;
while( cin>>a>>b)
{
int x, y;
int r = exgcd(a, b, x, y);
printf("%dx+%dy = %d\n", a, b, r);
printf("%d*%d+%d*%d = %d\n", a, x, b, y, r);
}
return 0;
}