当前位置: 首页 > news >正文

【高中小蓝本】数论 02 最大公约数 最小公倍数

一、求最大公约数的方法

数论中最大公约数的概念。首先说明,当a、b不全为零时,能同时整除a和b的整数(像\pm 1这类)就是它们的公约数。因为a、b不全为零,根据相关性质,可知a、b的公约数数量是有限的。然后,把这些公约数里最大的那个叫做a、b的最大公约数,用符号\left ( a,b \right )来表示,并且最大公约数是正整数。

1. 辗转相除法(欧几里得算法)

核心逻辑:用较大数除以较小数取余数,再用除数余数重复此操作,直到余数为0,此时的除数就是最大公约数。公表达:c(x表示a除以b的余数)。

2. 更相减损法(辗转相减法,出自《九章算术》)

步骤:① 若两数都是偶数,用2约简 (就是除以2,重复此步骤直到至少一个数为奇数);

② 用大数减小数,再用所得的 “差” 与 “较小数” 重复相减,直到两数相等(此时的数称为 “等数”);

③ 最终最大公约数为 “等数” 与①中约简的所有2的乘积。

3. 分解质因数法

步骤:将两个数分别分解为质因数的乘积,提取所有公有质因数并相乘,结果即为最大公约数。

4.穷举法

穷举法的基本思路

穷举法(枚举法)求最大公约数的步骤是:

  1. 找到两个数中 较小的那个数(因为最大公约数不可能大于较小的数)。
  2. 从这个较小的数开始,向下依次尝试更小的整数。
  3. 检查每个数是否能同时整除原来的两个数。
  4. 找到的第一个符合条件的数,就是最大公约数。

性质 

结合律

GCD 具有结合律GCD(a,b,c) = GCD(GCD(a,b), c)

示例:求 gcd (12, 18)

  • 较小的数是 12
  • 我们从 12 开始检查:
    • 检查 12:
      • 12 ÷ 12 = 1(整除)
      • 18 ÷ 12 = 1 …… 余 6(不能整除)
      • 所以 12 不是最大公约数。
  • 接下来,按穷举法的规则,我们要检查比 12 小的下一个整数,也就是 11、10、9、8、7、6……
    • 11:12 ÷ 11 余 1(不行)
    • 10:12 ÷ 10 余 2(不行)
    • 9:12 ÷ 9 余 3(不行)
    • 8:12 ÷ 8 余 4(不行)
    • 7:12 ÷ 7 余 5(不行)
    • 6:
      • 12 ÷ 6 = 2(整除)
      • 18 ÷ 6 = 3(整除)
      • 所以 6 是最大公约数。

为什么可以直接跳到 6

虽然穷举法是 “从大到小逐个试”,但在实际操作中,我们知道最大公约数一定是两数之差的约数(这个是数论性质)。

  • 18 - 12 = 6
  • 所以最大公约数一定是 6 的约数,也就是可能是 6、3、2、1。
  • 这样我们可以直接从 6 开始试,减少中间多余的步骤。

✅ 总结第二次判断 6 是因为:

  1. 穷举法是从较小数开始,由大到小检查。
  2. 12 不行,就尝试更小的数。
  3. 利用数学性质可以直接跳到 6(两数之差),减少多余计算。
  4. 6 正好能同时整除 12 和 18,所以它就是最大公约数。

5. 递归法(基于辗转相除法的递归实现)

通过递归函数实现辗转相除法的逻辑:当余数\(b = 0\)时,返回当前的除数a;否则递归调用\gcd(b, a mod b)。代码逻辑示例(伪代码):

plaintext

int gcd(int a, int b) {if (b == 0) return a;return gcd(b, a % b);
}

示例:求gcd(6, 12),递归过程为gcd(6, 12) to gcd(12, 6) to gcd(6, 0),返回6。

6. 短除法

步骤:用两数的公约数连续去除两数,直到商为互质数(即只有公约数1),最后将所有除数相乘,结果就是最大公约数。

示例:求gcd(36, 54)

先除以公约数 2 得到 18 ,27 

再除以公约数3,得到6 ,9

再除以3 得到 2,3   , 2,3 互为质数 。 

除数相乘  2*3*3 =18  最大公约数为18。

二、求两个数最小公倍数

求两个数的最小公倍数有多种方法,以下是常用且清晰的方法总结(含原理、步骤与示例):

性质 结合律

多个数的 LCM 同样具有结合律LCM(a,b,c) = LCM(LCM(a,b), c)。注意:两个数的 LCM 公式为 LCM(a,b) = a×b // GCD(a,b)(先乘后除,避免精度问题)。

一、公式法(利用最大公约数)

核心原理:两个正整数的乘积等于它们的 ** 最大公约数(GCD)最小公倍数(LCM)** 的乘积,即:

步骤

  1. 先求两数的最大公约数(可通过辗转相除法更相减损法等实现);
  2. 用两数的乘积除以最大公约数,结果即为最小公倍数。

示例:求LCM(12,18)

  • 第一步:求GCD(12,18)。用辗转相除法:18/12 余 6;12 / 6 = 2 余 0,故GCD(12, 18) = 6。
  • 第二步:计算最小公倍数:LCM(12, 18) = (12*18)/6=36。

二、分解质因数法

核心原理:将两个数分解为质因数的乘积,取每个质因数的最高次幂相乘,结果即为最小公倍数。

步骤

  1. 分别分解两个数的质因数;
  2. 找出所有质因数,并确定每个质因数在两个数中的最高次幂
  3. 将这些最高次幂的质因数相乘。

示例:求 LCM(12,18)

  • 分解质因数:12 =2^2*3,18=3^2 * 2;
  • 取最高次幂:质因数 2 的最高次幂为 2^2(来自 12),质因数 3 的最高次幂为 3^2(来自 18);
  • 相乘:2^2  * 3^2  =36。

三、短除法

核心原理:用两个数的公有质因数连续除,直到商为互质数(只有公约数 1),再将所有除数和最终的商相乘。

步骤

  1. 用两数的最小公有质因数(通常从最小的质数开始,如 2、3 等)去除两数,得到商;
  2. 继续用新商的公有质因数去除,直到商互质;
  3. 把所有除数和最后两个互质的商相乘。

示例:求 \(\text{LCM}(16, 24)\)

  • 用 2 除:\(16 \div 2 = 8\),\(24 \div 2 = 12\);
  • 再用 2 除:\(8 \div 2 = 4\),\(12 \div 2 = 6\);
  • 再用 2 除:\(4 \div 2 = 2\),\(6 \div 2 = 3\)(此时 2 和 3 互质);
  • 相乘:\(2 \times 2 \times 2 \times 2 \times 3 = 48\)。

四、特殊情况快速法

根据两数的关系,可直接得出最小公倍数:

1. 互质关系

若两数的最大公约数为 1(互质),则最小公倍数为两数的乘积

示例

  • 7 和 8 互质(只有公约数 1),故 \(\text{LCM}(7, 8) = 7 \times 8 = 56\);
  • 2、3、5 两两互质,故 \(\text{LCM}(2, 3, 5) = 2 \times 3 \times 5 = 30\)。
2. 倍数关系

若一个数是另一个数的倍数,则较大的数就是最小公倍数。

示例

  • 25 是 5 的倍数,故 \(\text{LCM}(25, 5) = 25\)。

五、累加法(迭乘法)

核心原理:最小公倍数是两数的共同倍数,因此将其中一个数依次扩大倍数,直到能被另一个数整除。

步骤

  1. 选两数中较大的数(或任选其一);
  2. 依次将其扩大 1 倍、2 倍、3 倍……;
  3. 第一个能被另一个数整除的数,即为最小公倍数。

示例:求 \(\text{LCM}(12, 8)\)

  • 选 12,依次扩大:\(12 \times 1 = 12\)(\(12 \div 8\) 余 4,不行);\(12 \times 2 = 24\)(\(24 \div 8 = 3\),能整除);
  • 故 \(\text{LCM}(12, 8) = 24\)。

六、枚举法(暴力枚举)

核心原理:从两数的较大值开始,依次加 1,直到找到能同时被两数整除的最小数。

步骤

  1. 找出两数中的较大值
  2. 从该值开始,依次加 1,检查是否能同时被两数整除;
  3. 第一个符合条件的数即为最小公倍数。

示例:求 \(\text{LCM}(12, 8)\)

  • 较大值为 12;
  • 检查 12:\(12 \div 8\) 余 4(不行);
  • 检查 13:\(13 \div 12\) 余 1,\(13 \div 8\) 余 5(不行);
  • …… 直到 24:\(24 \div 12 = 2\),\(24 \div 8 = 3\)(能整除);
  • 故 \(\text{LCM}(12, 8) = 24\)。(注:此方法效率低,适合小数。)

方法适用场景总结

  • 公式法、分解质因数法:适合大多数情况,逻辑清晰且计算高效;
  • 短除法:直观易操作,适合初学者理解 “质因数与公倍数的关系”;
  • 特殊情况快速法:可大幅简化计算(如互质、倍数关系的数);
  • 累加法、枚举法:更偏向基础理解或验证,适合小数值或教学演示。

算法题

3334. 数组的最大因子得分 - 力扣(LeetCode)

http://www.dtcms.com/a/483034.html

相关文章:

  • 【LeetCode】72. 编辑距离
  • 17网站一起做网店的流程北京竞价托管代运营
  • DM线程的管理知识学习
  • System V IPC:Linux进程通信的标准方案
  • 免费的舆情网站app下载ui设计手机界面
  • Spring 三级缓存
  • 怎么样看网站用什么程序做的开发公司经营范围
  • 小广告网站音乐网站系统怎么做
  • 单片机中的TVS管
  • c++最常用的几种设计模式
  • 河南平台网站建设公司临沂企业自助建站系统
  • 下载 asp 网站源码响应式网站 翻译代码
  • 大气医院网站源码河北省住房和城乡建设厅信用网站
  • 【agent】AI 数字人构建10:FunASR 1:语音识别C++服务/客户端构建
  • 教育机构网站建设方案书企业邮箱注册需要多少钱
  • 河南省建设工程监理协会网站cms 导航网站
  • Centos Stream 8 Tomcat学习
  • 网站系统cmsphp教育网站开发工作
  • 在Ubuntu22.04和24.04中安装Docker并安装和配置Java、Mysql、Tomcat
  • 【Linux】线程同步与互斥(1)
  • 网站开发英语英语义乌网八方资源家1688网商网
  • 基于单片机的PID调节脉动真空灭菌器上位机远程监控设计
  • 汕头网站关键词优化教程资源分享网站怎么做
  • STM32H7xx 运行 LWIP 时的 MPU 配置介绍 LAT1510
  • 能动框架战场:如何摆脱供应商锁定并在下次AI战争中生存
  • 免费试用网站空间人人开发接单官网
  • 视联网技术产业观察与分析:视频隐私与安全防护
  • 南通网站建设祥云深圳罗湖网站设计公司
  • 基于蚁群算法优化BP神经网络的实现方法
  • 《Effective Java》第10条:覆盖 equals 时请遵守通用规定