欧几里得算法:求最大公约数
//递归形式
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
//非递归形式
int gcd(int a,int b)
{
while(b>0){
int c=a%b;
a=b;
b=c;
}
return a;
}
扩展欧几里得算法:求最大公约数和不定方程组ax+by=gcd的特解 x0,y0
注意:ax + by = c 有解的充要条件: c % gcd(a , b) == 0
方程组的通解:
int e_gcd(int a,int b,int &x,int &y)
{
if(b==0){
x=1;
y=0;
return a;
}
int gcd=e_gcd(b,a%b,x,y);
int temp=x;
x=y;
y=temp-a/b*y;
return gcd;
}