欧几里得/扩展欧几里得算法
欧几里得算法:
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,使得:
现在假设,我们要求一个中的值,我们通过扩展欧几里得求出的是满足的,所以要使方程有解,还需要满足
,最后给的出来的都乘以就是我们要求的答案。
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;
}
说明:这里的返回值指的是的值,这个值一直没有改变,同时还求出了x和y.