算法-扩展欧几里得
2016-11-16 17:26
288 查看
以下部分内容摘自百度百科
这存在这样的关系:a * b=gcd * lcm
gcd函数就是用来求(a,b)的最大公约数的。
gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)
公式表述 : gcd(a,b)=gcd(b,a mod b)
存在整数对 x,y ,使得 gcd(a,b)=ax+by。
最大公约数与最小公倍数的关系
设a,b的最大公约数为gcd,最小公倍数为lcm这存在这样的关系:a * b=gcd * lcm
欧几里德算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:gcd函数就是用来求(a,b)的最大公约数的。
gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)
公式表述 : gcd(a,b)=gcd(b,a mod b)
int gcd(int a,int b){ return b?gcd(b,a%b):a; }
扩展欧几里得算法
扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。
int gcd(int a,int b,int &x,int &y){ if (b==0){ x=1,y=0; return a; } int q=gcd(b,a%b,y,x); y-=a/b*x; return q; }
相关文章推荐
- 关于欧几里得及其扩展算法(C语言实现)
- 欧几里得扩展算法
- 欧几里得扩展算法
- [省选前题目整理][SGU 261]Discrete Roots(扩展欧几里得+中国剩余定理+原根+大步小步算法)
- poj 1061 小白算法练习 数论 扩展欧几里得 青蛙的约会
- 欧几里得扩展算法
- 扩展欧几里得(Extended Euclid)算法求最大公约数和乘法逆元
- 欧几里得扩展算法
- 欧几里得(Euclid)算法及其扩展
- 欧几里得扩展算法
- 欧几里得算法和扩展欧几里得算法
- 欧几里得扩展算法
- 扩展欧几里得算法理解
- [数论]HOJ 2185 Min Chain 扩展欧几里得算法
- Java实现算法导论中求解模线性方程解(基于最大公约数欧几里得扩展算法)
- 扩展欧几里得 小白算法学习
- 欧几里得扩展算法
- 欧几里得扩展算法详解及POJ1061
- 扩展欧几里得算法
- 欧几里得及欧几里得扩展算法