欧几里得算法:
两个数x和y的最大公约数gcd(x,y)=gcd(y,x%y).这个就不解释了。
关于Exgcd:
用法:
exgcd用于求解不定方程ax+by=c的一组解。准确的说,它是用来求解ax+by=gcd(a,b),的x和y。
求解过程:
采用递归方式,我们对a,b不断的求解gcd过程,并从中推出x和y.
我们假设有ax+by=gcd(a,b).
令a=b,b=a%b,则有
由于a%b=a-(a/b)*b,(此处为整除)
将整数化开,有
于是,令x=y,y=x-a/b*y;我们从b,a%b转移到了a,b。
考虑边界,当b=0时,有
于是
我们令x=1,y=0,则求出了ax+by=gcd(a,b)中当辗转相除到最后时的一组解,然后将之往后递推。
求ax+by=k的解时,如果,在ax+by=gcd(a,b)两边同时乘上k/gcd(a,b),得到x,y.
否则,该方程无解。有兴趣可以看看贝祖定理.
inline int exgcd(int a, int b, int &x, int &y)
{
if(! b){x = 1;y = 0;}
else
{
exgcd(b, a % b, x, y);
int t = x;
x = y;y = t - (a / b) * y;
}
return 0;
}
关于通解:
设我们已经找到了一组x,y满足ax+by=gcd(a,b);
由于,我们有
(*)
假设存在另一解,则存在
分离出y0得
我们要保证
由(*)得
则有.即
.
显然,若a,b互质,则有.
若a,b不互质,则,
使得
则
其中,互质。
由此,x的通解为.其中
x的最小正整数解.
设由于x可能为负,所以事实上
同样的,求解也可以这么写。
emmmmmmm.