[学习笔记] 拓展欧几里得算法
来源:互联网 发布:开淘宝网店的流程 编辑:程序博客网 时间: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为质数的若干次方的情况。
- [学习笔记] 拓展欧几里得算法
- 基础数论学习笔记-----------拓展欧几里得算法【Extended Euclidean Algorithm】
- 基础数论学习笔记-----------拓展欧几里得算法【Extended Euclidean Algorithm】
- 欧几里得算法+拓展欧几里得算法
- 欧几里得算法&&拓展欧几里得算法
- 欧几里得算法&&拓展欧几里得算法
- 欧几里得与其拓展算法
- 拓展的欧几里得算法
- 拓展欧几里得算法
- 拓展欧几里得算法
- 拓展欧几里得算法模板
- 拓展的欧几里得算法
- 拓展欧几里得算法
- 拓展欧几里得算法
- 欧几里得拓展算法求模逆元
- 欧几里得算法及其拓展
- 拓展欧几里得算法
- 欧几里得算法及其拓展
- python fabric 库的学习使用
- Android自定义View:MeasureSpec的真正意义与View大小控制
- MyBatis连接池源码分析
- java字符串查找算法
- charles弱网测试
- [学习笔记] 拓展欧几里得算法
- L1-019. 谁先倒
- [线代小记] 树形图求和
- Linux中环境变量的作用
- solr6的学习与使用(五):联想词功能
- win10环境下实现python3.5与python2.7共存
- Java面试题集
- 标准流
- 二维数组