ax + by = gcd(a,b) 满足贝祖定理
#include <iostream>
using namespace std;
int exgcd1(int m,int n,int &x,int &y)//非递归版本
{
int x1,y1,x0,y0;
x0=1; y0=0;
x1=0; y1=1;
x=0; y=1;
int r=m%n;
int q=(m-r)/n;
while(r)
{
x=x0-q*x1; y=y0-q*y1;
x0=x1; y0=y1;
x1=x; y1=y;
m=n; n=r; r=m%n;
q=(m-r)/n;
}
return n;
}
int exgcd2(int a,int b,int &x,int &y)//递归版本
{
if(b==0)
{
x=1;
y=0;
return a;
}
int r=exgcd2(b,a%b,x,y);
int t=x;
x=y;
y=t-a/b*y;
return r;
}
int main()
{
int a,b,x,y,res;
cin >> a >> b;
res = exgcd1(a,b,x,y);
//res = exgcd2(a,b,x,y);
cout << res << endl;
cout<< "x="<< x << " " << "y=" << y << endl;
return 0;
}
1299

被折叠的 条评论
为什么被折叠?



