[学习笔记] 拓展欧几里得算法

来源:互联网 发布:开淘宝网店的流程 编辑:程序博客网 时间:2024/06/05 04:35

一直对拓展欧几里得算法处于不明觉厉的状态

觉得接下来我要好好研究数论,首当其冲的当然就是拓展欧几里得算法啦!

题:求ax+by=c的解。b<=a。

将问题规模变小,令a=kb+d,有(kb+d)x+by=c,亦即b(kx+y)+dx=c。

然而发现b比a小,d比b小,所以问题规模变小了。

因此有代码:

inline int exgcd(int a,int b,int &d,int &x,int &y)

{ if(!b) d=a,x=1,y=0;

else exgcd(b,a%b,d,y,x),y-=(a/b)*x;

}

然后注意到由于初始值x=1,y=0所以这样计算出来的解是ax+by=(a,b)的(x',y')。

然后判断一下(a,b)|c是否成立,不是就无解,否则解(x,y)=(cx'/d,cy'/d),其中d=(a,b)。

例如,在模非质数p的意义下求v的逆元t=inv(v)。

vt=1(mod p)亦即vt+pk=1(注意这里不要写-kp),把t和k看作x,y即可。

由此式可以看出t存在的充要条件是(v,p)=1。


关于拓展欧几里得合并来代替中国剩余定理(CRT)以便把后者扔进垃圾桶。

首先CRT的唯一用处就是这个结论:在模一堆互质的数得到的方程中,解在模模数乘积意义下是有解并且唯一的。

考虑两个方程x=a1 (mod m1) x=a2 (mod m2) , (m1, m2)>=1

那么令m=[m1, m2],那么有x=m1*k1+a1=m2*k2+a2 (mod m)显然成立。

使用欧几里得算法解出这个方程的一个解,就可以知道x在模m意义下的解了。

这个算法可以用来计算形如C(n,m)%P在n,m特别大,且P为质数的若干次方的情况。

原创粉丝点击