首先我们规定:0不参与公约数和公倍数的讨论

先来讨论最大公约数:

最大公约数求法:两个数的所有公共质数相乘. 考虑三个问题。

  1. 为什么是公共的:公共代表这个数可以被两个数都整除
  2. 为什么是质数:合数一定能分解出质数,若为公共合数,则代表并非最简。
  3. 为什么两个数分别除以最大公因数后满足互质:因为抽掉了公共质因子。

由3得: 两个数相乘=这两个数的最大公约数*最小公倍数

因为最大公约数两个数的公共质数相乘, 但最小公倍数是两个数相乘后除以公共质数
(第三点),因此互补。

证明:

结论:
1、最大公因数是两个数的公共质数相乘。
2、最小公倍数是两个数相乘后除以公共质数
3、两个数相乘=最大公因数*最小公倍数。


接下来是经典的“辗转相除法(欧几里得算法)”求最大公约数与最小公倍数的代码。

辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的差的最大公约数。例如,252 和 105 的最大公约数是 21;因为 252 − 105 = 21 × (12 − 5) = 147 ,所以 147 和 105 的最大公约数也是 21。

在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。

这时,所剩下的还没有变成零的数就是两数的最大公约数。



#include<stdio.h>
int main() {int x, y, z, m, n;printf("请输入两个数:");scanf("%d%d", &x, &y);m = x, n = y;while (y != 0) {z = x%y;x = y;y = z;}printf("最大公约数是: %d\n", x);printf("最小公倍数是: %d\n", m*n / x);return 0;
}

欢迎在评论区留言。 如果这篇文章对你产生了帮助,就请给博主一个赞吧!大家的点赞是我创作的最大动力!

辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。相关推荐

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

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

  2. 离散数学/初等数论:用“质因子分解法”和“欧几里得算法”求最大公约数gcd;“质因子分解法”和“最简算法”求最小公倍数lcm;以及对“意义”的一些看法。

    需要在开头提前说明,本篇文章仅仅用于在学习初等数论或者离散数学时候对算术基本定理的理解,实际应用的时候把结论告诉大家,想求最大公约数就用欧几里得算法是最简单的,在本篇不再赘述,有机会我会在其他文章中说 ...

  3. 欧几里得算法求最大公约数、最大公倍数

    欧几里得算法求最大公约数.最大公倍数 最大公约数(Greatest Common Divisor, GCD),是指2个或N个整数共有约数中最大的一个.a,b的最大公约数记为(a, b).相对应的是最小 ...

  4. 欧几里得算法求最大公约数python,算法:欧几里得求最大公约数(python版)

    #欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...

  5. 欧几里得算法求最大公约数之惊掉下巴的代码简化(纯C语言)

    欧几里得算法求最大公约数也叫辗转相除法. 证明 有两个数a,b,且a = kb + r(a,b,k,r皆为正整数,且r<b) 假设d为a,b的一个公约数 而r = a - kb,两边同时除以d, ...

  6. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...

    用欧几里得算法求最大公约数 For this topic you must know about Greatest Common Divisor (GCD) and the MOD operation ...

  7. C语言:欧几里得算法求最大公约数

    文章目录 欧几里得算法 C语言:欧几里得算法求最大公约数 C语言:穷举法 欧几里得算法 举个例子说明欧几里得算法. 如图所示,用正方形地板砖,把这一块粉红色空地(长为xxx,宽为yyy,x>yx ...

  8. 最小公倍数递归c语言,递归法求最大公约数和最小公倍数的实现代码

    #include using namespace std; int gcd(int a, int b);//声明最大公约数函数 int main() { int num1 = 1; int num2 ...

  9. 欧几里得算法求两个正整数的最大公约数

    此题可以使用暴力破解法解决,但是效率不高. 欧几里德算法又称辗转相除法,其计算原理依赖于下面的定理: gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)   ...

最新文章

  1. 开发工具之pycharm 快捷键说明
  2. Spring 异步调用,一行代码实现!舒服,不接受任何反驳~
  3. java的多线程实现方式_java 多线程实现方式
  4. python安装第三方包总是超时_(python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, 'Read timed out.')...
  5. 2.2 KNN算法实现
  6. Teams数据统计 - 聊天消息
  7. 十大类疫情服务紧缺 阿里广发英雄帖抗疫小程序开发者最高可获50万元奖励
  8. 一次难忘的 MTS 故障的排除过程
  9. 详解 | 求你别用效率低下的I/O了,要不试试这种I/O
  10. SQL学习--Select(一)TOP、派生表、连接、谓词
  11. c55x 汇编语言指令,[转载]关于TMS320C55x的汇编语言中的.sym伪指令
  12. php.js 文件下载,使用JavaScript开始下载文件
  13. 2011计算机等级考试二级c语言公共基础教程.doc,2011年全国计算机等级考试二级c语言公共基础知识复习100题及答案.doc...
  14. 新网漫时代下的国漫“哥伦布”征程
  15. matlab 电流平均值,电流平均值谐波检测方法MATLAB仿真
  16. openpyxl批量删除表格中的空白行,并处理数据样式
  17. 笔记本电脑分区后怎么恢复?3个方法
  18. 基于STM32设计的智能家居系统(采用ESP8266+OneNet云平台)
  19. Vertica常用语法
  20. linux 2.6内核镜像,Linux2.6内核镜像的构建过程

热门文章

  1. 原创 | 分布式事务科普(终结篇)
  2. Kafka分区分配策略(1)——RangeAssignor
  3. Mybatis SQL拦截器实现
  4. OS--进程间通信详解(一)
  5. Wave-Share -无服务器,点对点,通过声音共享本地文件
  6. 使用Webrtc和React Js在网络上共享跨平台的点对点文件
  7. Bitmovin视频开发者报告回顾
  8. Java多线程之线程池详解
  9. 微信小程序基础架构浅析
  10. 「递归」第7集 | 腾讯开源联盟出征!