介绍最大公因数和最小公约数(C++)

最大公因数(GCD)与最小公倍数(LCM)的概念

最大公因数(Greatest Common Divisor,GCD)指两个或多个整数共有的最大正整数因数。最小公倍数(Least Common Multiple,LCM)则是能够被这些整数整除的最小正整数。两者关系为:

\\text{LCM}(a, b) = \\frac{\|a \\times b\|}{\\text{GCD}(a, b)}


C++ 实现方法

欧几里得算法(递归法)计算 GCD

通过递归方式求解,基于数学原理:

\\text{GCD}(a, b) = \\text{GCD}(b, a % b) 代码示例:

cpp 复制代码
int gcd(int a, int b) {
    if (b == 0) return a;
    return gcd(b, a % b);
}
迭代法计算 GCD

避免递归开销的迭代实现:

cpp 复制代码
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}
计算 LCM

利用 GCD 结果推导 LCM:

cpp 复制代码
int lcm(int a, int b) {
    return abs(a * b) / gcd(a, b);
}

标准库函数

C++17 起可直接使用 <numeric> 中的 std::gcdstd::lcm

cpp 复制代码
#include <numeric>
int gcd_val = std::gcd(a, b);
int lcm_val = std::lcm(a, b);

注意事项

  • 输入为负数时,需转换为绝对值处理或依赖库函数自动处理。
  • 大整数运算时需考虑使用 long long 类型避免溢出。
相关推荐
小羊没烦恼!15 分钟前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
Keven_1131 分钟前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
mengzhi啊1 小时前
QPluginLoader 动态 DLL 插件版,支持插件之间通信,广播。请求和应答
c++·qt
脉动数据行情11 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#
小荷才露尖尖角,早有蜻蜓立上头1 小时前
过滤器的4种创建方式
java
大圣编蚕1 小时前
Java ByteArrayInputStream 详解:从入门到实战
java·开发语言·算法
菜鸟~noob2332 小时前
【电子战】第02篇:能量检测器 vs. 相关检测器【含matlab代码】
开发语言·matlab
程序员阿明2 小时前
idea把插件啥的不默认放在C盘
java·ide·intellij-idea
linweidong2 小时前
中科闻歌Java面试题及参考答案
java·python·大模型·提示词·ai agent·mcp·rag原理
OpenAnolis小助手3 小时前
一句话看透 JVM,SysOM 诊断 Skill 新增 Java 应用诊断能力
java·开发语言·jvm·阿里云·操作系统控制台·sysom