扩展欧几里得算法
2017-05-02 10:58
295 查看
扩展欧几里得算法
算法分析:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示
a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。
递归代码
返回的值为a,b的最大公约数;
算法分析:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示
a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。
递归代码
long long extgcd(long long a, long long b, long long &x, long long &y) { long long d, t; if (b == 0) { x = 1; y = 0; return a; } d = extgcd(b, a % b, x, y); t = x - a / b * y; x = y; y = t; return d; }非递归代码
//非递归代码 int exgcd(int m,int n,int &x,int &y) { int x1,y1,x0,y0; x0=1; y0=0; x1=0; y1=1; x=0; y=1; int r=m%n; int q=(m-r)/n; while(r) { x=x0-q*x1; y=y0-q*y1; x0=x1; y0=y1; x1=x; y1=y; m=n; n=r; r=m%n; q=(m-r)/n; } return n; }
返回的值为a,b的最大公约数;
经历extgcd函数X值变为最小解这个解可能为负
可将X的负解变成正解x=x+b/d;y=y-a/r; 直到变成正
应用
扩展欧几里德算法的应用主要有以下三方面:
(1)求解不定方程;
(2)求解模线性方程(线性同余方程);
(3)求解模的逆元;
相关文章推荐
- 扩展欧几里得算法
- 从倒水问题到欧几里得算法扩展
- [BZOJ2142] 礼物 - Lucas定理及扩展 - 中国剩余定理 - 扩展欧几里得算法
- 关于欧几里得算法及其扩展
- 欧几里得、扩展的欧几里得算法
- 扩展欧几里得算法
- 浅谈数论(四)扩展欧几里得算法与乘法逆元
- codeforces 7C 【扩展欧几里得算法】
- 扩展欧几里得算法
- 扩展欧几里得算法(求最大公约数与逆)
- 扩展欧几里得算法
- 扩展的欧几里得算法求最大公约数的C/C++ 实现
- 扩展欧几里得算法
- 欧几里得算法(辗转相除法 )以及扩展欧几里得算法
- 欧几里得算法(辗转相除)及其扩展证明
- 扩展欧几里得算法
- 扩展欧几里得算法(模板)
- 扩展欧几里得算法
- 欧几里得算法和扩展欧几里得算法
- 欧几里得算法及扩展欧几里得