更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数
更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数
标签(空格分隔): 算法 算法竞赛
这两种算法平时经常听到,听起来也很装逼,但是我老是忘了他们的原理,今天好好想想,写下来。
- 更相减损法
更相减损法最早起源于我国的《九章算术》,用于求两个数的最小公倍数。大意是给定两个数a,b,如果存在偶数,就将偶数以2;否则,就比较两数大小,用大数减小数,得到一个差;对差和剩下的那个小数重复该过程,直到两数相等,下一次相减结果为0,这时的数就是a和b的最大公约数。注意,去掉偶数除以2的步骤,也正确,但是加上这一步可能会让时间复杂度减少。
例如:15和12。15-12=3;12-3=9;9-3=6;6-3=3;3=3,跳出。则最大公因数是3。
算法的C/C++代码写法如下(循环实现):
int gcdgxjs(int a,int b) {while (a!=b) {if (aif (a>b) a-=b;else b-=a;}return a;
)
- 辗转相除法
辗转相除法最早是由欧几里得发现的,也被用来求最大公约数。算法是这样的:给定两个数a,b,求a%b,如果余数非0,就继续用除数除以余数,重复该过程,直到除数为0。此时的被除数,就是最大公约数。
例如,42和12。42%12=6;12%6=0,6&0,此时的6即为最大公约数。
算法的C/C++代码写法如下(递归实现):
int gcd(int a,int b) {if (b==0)return a;gcd(b,a%b);
}
上面就是这两个算法的具体实现过程。除此之外,再补充一个定理:两个正整数a,b。假设他们的最大公约数是p,最小公倍数是q,则q=a*b/p(即ab=pq)。证明很简单,多想想就好了,在此不再赘述。
转载于:https://www.cnblogs.com/yichuan-sun/p/9624172.html
更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数相关推荐
- 求最大公约数:更相减损法和辗转相除法
更相减损法原理 假设有两个数161和63,我们要求这两个数的最大公因数,不妨假定这个最大公因数为m,我们可以将较大的数161看成63+98,63与98的和161可以被m整除,其中63也可以被m整除,自 ...
- 更相减损法和辗转相除法求最大公约数
辗转相除法 原理 1.a和b的最大公因数也是b和r的最大公因数.其中,r是a除以b的余数 证明 计算过程 40和15的最大公约数 40➗15 = 2-10 15➗10 = 1-5 10➗ 5 = 2- ...
- 求最大公约数(更相减损术辗转相除法)
求解最大公约数的多种Way: 1 暴力解决法:M不断自减找到最大公约数. 2 辗转相除法:反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数. 3 更相减损术:若两者都为偶数,进行折半,直到 ...
- 辗转相除法和更相减损法-详解——求最大公约数(Java)
辗转相除法 简介:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法. 原理:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数. 操作 ...
- 求最大公约数和最小公倍数(更相减损法/辗转相除法)
目录 一.最大公约数 1.1 更相减损法 1.2 辗转相除法 二.最小公倍数 2.1 最小公倍数=两数相乘/最大公约数 2.2 用较小数的倍数除以较大数 一.最大公约数 1.1 更相减损法 原理如下图 ...
- Python使用更相减损术计算两个整数的最大公约数
更相减损术是<九章算术>中给出的一种用于约分的方法,也可以用来计算最大公约数,其步骤为: 1)如果两个整数都是偶数,就使用2约简,直到两个整数不再都是偶数,然后执行第2步.如果两个整数不都 ...
- 更相减损术,辗转相除法
一,更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,适用于任何需要求最大公约数的场合. 证明: 设gcd(x,y)=d,则满足x=k1*d,y=k2*d,易得 ...
- 更相减损法 php,求两数最大公约数 - WAITING520的个人空间 - OSCHINA - 中文开源技术交流社区...
1.普通写法 /** * 普通写法 * @param numbera * @param numberb * @return */ public static int gcd(int numbera, ...
- 【C/C++】最大公约数和最小公倍数(辗转相除、更相减损、stein)
一.最大公约数和最小公倍数 数学性质: 如果b是A和B的公约数,那么:b也是A+B的约数,即b是A,B,A+B的公约数.b也是A-B的约数,即b是A,B,A-B的公约数.更一般地,对于任意整数x.y, ...
最新文章
- [转]理解“Future”
- OpenTsdb官方文档-----理解指标和时间序列
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用41
- windows 下eclipse 连HBASE
- Process finished with exit code 1
- python环境搭建和pycharm的安装配置
- 即时获取最新全国省市区县地图json数据(亲测可用)以及echarts中使用中国地图
- 长沙云长计算机,【长沙记忆】原来关羽和长沙有这么多不解之缘
- CPU 工作原理(附详细图解)
- 微信小程序 live-player 无声音
- python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量
- MATLAB拟合函数使用说明
- 关于两个Myeclipse共存的问题,同时激活的问题
- redis集群模式登陆
- python之禅 源码 恺撒加密/映射加密
- QT 使用数据流方式QDataSteam读写结构体数据
- AOP中的概念通知、切点、切面、
- 根据乐谱合成钢琴音乐
- Failed to launch emulator 和 Failed to install the app解决方法
- 【ESP32】ESP-Face 人脸检测识别