最大公约数和最小公倍数求解,常用的方法是短除法进行因式分解,然后最大公约数是所有公共因子的乘积,最小公倍数是所有因子的乘积。
本质上求最小公倍数就是求最大公倍数:x=m*ay=m*b;m是最大公约数,那最小公倍数就是m*a*b。所以可以得到最大公约数与最小公倍数的关系:

LCM(A,B) × GCD(A,B)=A × B
其中LCM是最小公倍数,GCD是最大公约数

来源:https://blog.csdn.net/Holmofy/article/details/76401074
作者总结出来的结论非常的有用,我们后续就根据这个思路去写算法。

辗转相除法(欧几里得算法)求最大公约数

辗转相除法:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,除数去除出现的余数(第一余数),再用第一余数去除出现的余数(第二余数),如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
来源:https://baike.baidu.com/item/辗转相除法/4625352?fr=aladdin

注:百度百科里面的描述好像不对。大家可以比较下

具体算法如下:

int max_gcd(int a,int b){if (a <= 0 || b <= 0) {printf("please > 0\n");return -1;}if (a<b) {int tmp = a;a= b;b = tmp;}int r;while (a%b > 0) {r = a%b;a = b;b = r;}return b;
}

辗转相除法的时间复杂度:我们已知斐波纳契数列增长速度是指数,那么待分析的数列也是指数增长.设欧几里得算法需要k次,那么j=O(2^k),则k=O(lg j).

结合文章开头对于公约数的概念,我这边还有另外的一种方案去实现,具体代码如下:

int max_gcd1(int a,int b){if (a <= 0 || b <= 0) {printf("please > 0\n");return -1;}if (a<b) {int tmp = a;a= b;b = tmp;}int max = 1;for (int i = 1; i<=b; i++) {if (b%i == 0 && a%i == 0) {int tmpMax = max * i;if (tmpMax <= b) {if (b%tmpMax == 0 && a%tmpMax == 0){max = tmpMax;i = tmpMax;}else{max = i;}}else{max = i;}}}return max;
}

大家可以清晰的感觉到无论是从运算的速度,以及逻辑的清晰度来说,辗转相除法都有非常大的优势。

  在网上搜了一下,发现我国古代数学家提出了一个更相减损法的算法去求最大公约数。描述如下:
 第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
  第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
  则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。
  根据描述,我这边实现如下:

int max_gcd2(int a,int b){int c = 1;while (a%2 == 0 && b%2 == 0) {c *= 2;a = a/2;b = b/2;}while (a != b) {if (a > b) {a = a - b;}else{b = b - a;}}return a * c;}

两种算法的区别

(1)两者都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主,计算次数上辗转相除法计算次数相对较少,特别当两个数字大小区别较大时计算次数的区别较明显。

(2)从结果体现形式来看,辗转相除法体现结果是以相除余数为0则得到,而更相减损术则以减数与差相等而得到。
转载地址:https://blog.csdn.net/Holmofy/article/details/76401074

更多优质文章,可以微信扫码关注:

求解最大公约数以及最小公倍数相关推荐

  1. 辗转相除法(欧几里得算法)求解最大公约数、最小公倍数

    辗转相除法(欧几里得算法)求解最大公约数.最小公倍数 通常来说,求解两个数的最大公约数和最小公倍数是常见的算法问题,我们正常人最先想到的肯定是穷举法,通过while循环或者for循环,不断改变循环数, ...

  2. c语言 最大公约数 最小公倍数的编程,C语言三种算法求解最大公约数与最小公倍数...

    C语言三种算法求解最大公约数与最小公倍数 最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题.当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实 ...

  3. 多种方法求解“最大公约数”和“最小公倍数”

    目录 一.最大公约数 1.枚举法 2.辗转相除法 二.最小公倍数 1.枚举法 2.扩大法 Hello,大家好,我是灰小猿,一个超会写bug的程序猿. 今天在这里记录一下在程序中求解两个数的最大公约数和 ...

  4. 三种算法求解最大公约数和最小公倍数

    1.穷举法 穷举法的基本思想是:根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后 ...

  5. C++实现求解最大公约数和最小公倍数

    参考:http://baike.baidu.com/view/47637.htm?fr=aladdin 两种方法比较: (1)都是求最大公因数的方法,计算上辗转相除法以除法为主,更相减损术以减法为主, ...

  6. 五十九、如何求N个数的最大公约数和最小公倍数

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化. ---- Runsen 上次介绍了短除法的因式分解,下面正式进入求解:两个及以上个数的最大公 ...

  7. 三种算法求两个正整数的最大公约数和最小公倍数;求三个数的最大公约数和最小公倍数

    第二次作业 题目:求两个正整数的最大公约数和最小公倍数. 基本要求:1.程序风格良好(使用自定义注释模板),两种以上算法解决最大公约数问题,提供友好的输入输出. 提高要求:1.三种以上算法解决两个正整 ...

  8. python求两个数的最大公约数穷举法_五十九、如何求N个数的最大公约数和最小公倍数...

    「@Author:Runsen」 ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」 ❞ 上次介绍了短除法的因式分解,下面正式进入求解:「两个及 ...

  9. 求两数最大公约数和最小公倍数(详解)

    求两数最大公约数和最小公倍数 方法一:单独求解最小公倍数 若大数m是小数n的倍数,则大数m为所求的最小公倍数:若不是,另寻找一个能同时被两个整数的自然数.找到第一个后,break终止循环. 终止条件: ...

最新文章

  1. index 0 does not match the shape of the indexed tensor [8, 8, 4] at index 0
  2. dpkg: 处理软件包 update-notifier-common (--configure)时出错:
  3. php 调用 perl,perl中如何调用R语言
  4. php源码编程,10个小技巧让你做好php源码编程
  5. 贴花纸怎么贴_陶瓷贴花纸DIY怎么做?
  6. 1.5编程基础之循环控制 26 统计满足条件的4位数个数 python
  7. linux命令编写,Linux alias命令编写
  8. 如何在geth中创建genesis.json_Adobe XD 入门教程-如何在 Adobe XD 中创建交互式原型?...
  9. 软件设计师考试笔记:UML统一建模语言
  10. 法拉利等12家车厂 将与苹果手机联网(图)
  11. socket error:10053
  12. Android的一个登陆注册页面
  13. solr配置索引库启动tomcat报错记录及解决
  14. mysql语句高逼格_求一些逼格高的语句?
  15. matlab中如何取正数,excel表格数据取正值-怎么把excel表格的负数变成正数
  16. 互联网产品经理的职责
  17. 风控决策引擎——决策流路径规划
  18. 全国各地电台FM.ini汇总
  19. 华为正式上线鸿蒙,华为Mate30、鸿蒙OS资料汇总,方舟编译器正式上线
  20. Android OTA releasekey 替换

热门文章

  1. IS-IS协议分析与配置
  2. 核废料该如何处理,奥特曼发话了…
  3. ROC/AUC 简易试验 最佳截断点 混淆矩阵 敏感度 特异度 约登指数 各个指标置信区间
  4. Antd form 表单提交数据获取
  5. web开发——前端基础(1)—— 第一个网页的展示
  6. 书小宅之ubuntu安装nginx教程
  7. php写出32位ip地址格式,标准的ip地址格式是什么
  8. CCCC天梯赛L1-075 强迫症
  9. 【深度学习】回归问题损失函数——均方误差(MSE)
  10. 【元宇宙系列】经济学与元宇宙以及元宇宙的“原子性”(Mateverse)