扩展欧几里得
来源:互联网 发布:linux 进程cpu使用率 编辑:程序博客网 时间:2024/06/08 00:17
【1】欧几里得算法
任务:
- 求a和b的最大公约数( gcd )
算法:
- gcd( a,b )=gcd( b,a%b ),不断迭代,直到b=0,a就是最大公约数
原理:
- a=by+p
- a为最小公约数的倍数,b为最小公约数的倍数,故p也为最小公约数的倍数
代码模板:
int gcd(int a,int b) { if(a%b!=0) return gcd(b,a%b); else return b; }
【2】扩展欧几里得
任务:
- 求出a,b的最大公约数,且求出x,y满足ax+by=gcd( a,b )
算法:
( a>b)
1. 当b=0时,gcd( a,b )=a。此时x=1,y=0
2. b!=0时
a·x1+b·y1=gcd( a,b )
b·x2+(a%b)·y2=gcd( b,a%b )
a·x1+b·y1= b·x2+(a%b)·y2
ax1+by1=bx2+(a-(a/b)*b)y2=bx2+ay2-(a/b)*by2 ;
ax1+by1=ay2+b(x2-(a/b))y2 ;
∴ x1=y2;y1=(x2-(a/b))·y2
这样我们就得到了求解 x1,y1 的方法:x1,y1 的值基于 x2,y2.
上面的思想是递归定义了,因为 gcd 不断的递归求解一定会有个时候 b=0,所以递归可以结束。
代码模板:
void extend_Eulid(int a,int b){ if(b == 0){ x = 1; y = 0; q = a; //公约数为q } else{ extend_Eulid(b,a%b); //递归 int t = x; x = y; //求出x y = t - a/b*y; //求出y } }
…..END
阅读全文
0 0
- 【欧几里得&扩展欧几里得】
- 欧几里得和扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得&扩展欧几里得
- 欧几里得和扩展欧几里得
- 欧几里得与扩展欧几里得
- 欧几里得和扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得 扩展欧几里得
- 欧几里得与扩展欧几里得
- 欧几里得 & 扩展欧几里得
- 欧几里得 与 扩展欧几里得
- 欧几里得和扩展欧几里得
- 欧几里得与扩展欧几里得
- 扩展欧几里得
- 扩展欧几里得
- 扩展欧几里得
- 扩展欧几里得
- Coursera机器学习 Week3 笔记
- react-native-scrollable-tab-view的版本坑
- 算法工程师实习—月总结
- 《唱支山歌给党听》
- map和set的联系,entrySet中存储的数据
- 扩展欧几里得
- C~K的难题(费马小定理)
- 选项卡的使用
- java基础之---基本类型
- 刷题——Sumsets POJ
- numpy.plit
- 统计学之三大相关性系数(pearson、spearman、kendall)
- bzoj1925 [Sdoi2010]地精部落(dp)
- 数据库三范式详解+例子