欧几里得:
是求两个数的最大公约数:
int gcd(int a, int b)
{
if(b==0) return a;
return gcd(b, a%b);
}
扩展欧几里得:
已知a, b求解二元一次方程ax+by =gcd(a, b)的一组解(x,y);
int exgcd(int a,int b,int &x,int &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
int gcd=exgcd(b,a%b,x,y);
int x2=x,y2=y;
x=y2;
y=x2-(a/b)*y2;
return gcd;
}
设a,b,c为任意整数,g=gcd(a,b),方程ax+by=g的一组解是(x0, y0),则
当c是g的倍数时ax+by=c的一组解是(x0c/g, y0c/g);
当c不是g的倍数时无整数解。