扩展欧几里德算法
用来在已知a,b求解一组x,y使得a*x+b*y=gcd(a,b)(解一定存在,根据数论中的相关定理)
扩展欧几里德常用在求解模线性方程及方程组中
(1)
void
extgcd(
__int64
a,
__int64
b,
__int64
&x,
__int64
&y)
{
if
(!b)
{
x = 1;
y = 0;
}
else
{
extgcd(b,a%b,y,x);
y -= x*(a/b);
}
}
(2)
LL exgcd(LL a,LL b,LL &x, LL &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
LL r=exgcd(b,a%b,x,y);
LL t=x;
x=y;
y=t-a/b*y;
return r;
}
不定方程的通解:
若(x0,y0)是不定整数方程ax+by = c的一组解,则他的任意整数解都可以表示成(x0+ kb’, y0-ka’),其中a’ = a/gcd(a,b), b’ = b/gcd(a,b).