更相减损法和辗转相除法(GCD)求最小公倍数和最大公约数

标签(空格分隔): 算法 算法竞赛


这两种算法平时经常听到,听起来也很装逼,但是我老是忘了他们的原理,今天好好想想,写下来。

  1. 更相减损法
    更相减损法最早起源于我国的《九章算术》,用于求两个数的最小公倍数。大意是给定两个数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;
)
  1. 辗转相除法
    辗转相除法最早是由欧几里得发现的,也被用来求最大公约数。算法是这样的:给定两个数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)求最小公倍数和最大公约数相关推荐

  1. 求最大公约数:更相减损法和辗转相除法

    更相减损法原理 假设有两个数161和63,我们要求这两个数的最大公因数,不妨假定这个最大公因数为m,我们可以将较大的数161看成63+98,63与98的和161可以被m整除,其中63也可以被m整除,自 ...

  2. 更相减损法和辗转相除法求最大公约数

    辗转相除法 原理 1.a和b的最大公因数也是b和r的最大公因数.其中,r是a除以b的余数 证明 计算过程 40和15的最大公约数 40➗15 = 2-10 15➗10 = 1-5 10➗ 5 = 2- ...

  3. 求最大公约数(更相减损术辗转相除法)

    求解最大公约数的多种Way: 1 暴力解决法:M不断自减找到最大公约数. 2 辗转相除法:反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数. 3 更相减损术:若两者都为偶数,进行折半,直到 ...

  4. 辗转相除法和更相减损法-详解——求最大公约数(Java)

    辗转相除法 简介:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求两个正整数之最大公约数的算法. 原理:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数. 操作 ...

  5. 求最大公约数和最小公倍数(更相减损法/辗转相除法)

    目录 一.最大公约数 1.1 更相减损法 1.2 辗转相除法 二.最小公倍数 2.1 最小公倍数=两数相乘/最大公约数 2.2 用较小数的倍数除以较大数 一.最大公约数 1.1 更相减损法 原理如下图 ...

  6. Python使用更相减损术计算两个整数的最大公约数

    更相减损术是<九章算术>中给出的一种用于约分的方法,也可以用来计算最大公约数,其步骤为: 1)如果两个整数都是偶数,就使用2约简,直到两个整数不再都是偶数,然后执行第2步.如果两个整数不都 ...

  7. 更相减损术,辗转相除法

    一,更相减损术是出自<九章算术>的一种求最大公约数的算法,它原本是为约分而设计的,适用于任何需要求最大公约数的场合. 证明: 设gcd(x,y)=d,则满足x=k1*d,y=k2*d,易得 ...

  8. 更相减损法 php,求两数最大公约数 - WAITING520的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.普通写法 /** * 普通写法 * @param numbera * @param numberb * @return */ public static int gcd(int numbera, ...

  9. 【C/C++】最大公约数和最小公倍数(辗转相除、更相减损、stein)

    一.最大公约数和最小公倍数 数学性质: 如果b是A和B的公约数,那么:b也是A+B的约数,即b是A,B,A+B的公约数.b也是A-B的约数,即b是A,B,A-B的公约数.更一般地,对于任意整数x.y, ...

最新文章

  1. [转]理解“Future”
  2. OpenTsdb官方文档-----理解指标和时间序列
  3. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用41
  4. windows 下eclipse 连HBASE
  5. Process finished with exit code 1
  6. python环境搭建和pycharm的安装配置
  7. 即时获取最新全国省市区县地图json数据(亲测可用)以及echarts中使用中国地图
  8. 长沙云长计算机,【长沙记忆】原来关羽和长沙有这么多不解之缘
  9. CPU 工作原理(附详细图解)
  10. 微信小程序 live-player 无声音
  11. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量
  12. MATLAB拟合函数使用说明
  13. 关于两个Myeclipse共存的问题,同时激活的问题
  14. redis集群模式登陆
  15. python之禅 源码 恺撒加密/映射加密
  16. QT 使用数据流方式QDataSteam读写结构体数据
  17. AOP中的概念通知、切点、切面、
  18. 根据乐谱合成钢琴音乐
  19. Failed to launch emulator 和 Failed to install the app解决方法
  20. 【ESP32】ESP-Face 人脸检测识别

热门文章

  1. jabber协议概述
  2. jquery怎么动态修改css样式
  3. npm adduser的使用方法
  4. c语言实型存储方式,.C语言实型数据的编码和存储.pdf
  5. 解决IDEA插件安装慢、超时、不成功问题
  6. 程序员之路:sublime使用技巧
  7. 【编程】 打桩测试的原则及举例示范(详细讲解)
  8. YOLOV7-pose训练数据遇到的问题。
  9. CoreDNS简介和安装
  10. 微信小程序-图片自适应