欧几里得算法:
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
扩展欧几里得:
描述:设a,b不全为0,则存在整数x,y,使得:$$gcd(a,b)=xa+yb$$
现在假设,我们要求一个$$ax+by=c$$中$$x,y$$的值,我们通过扩展欧几里得求出的$$x,y$$是满足$$ax+by=gcd(a,b)$$的,所以要使方程有解,还需要满足
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 t=x;
x=y;
y=t-a/b*y;
return r;
}
说明:这里的返回值指的是$$gcd(a,b)$$的值,这个值一直没有改变,同时还求出了x和y.