介绍最大公因数和最小公约数(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::gcd 和 std::lcm:

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

注意事项

  • 输入为负数时,需转换为绝对值处理或依赖库函数自动处理。
  • 大整数运算时需考虑使用 long long 类型避免溢出。
相关推荐
白杨尚青42 分钟前
C++进阶篇(二):多态——虚函数、重写、虚函数表与三个经典坑(附完整代码仓库)
开发语言·c++·多态·虚函数·重写·动态绑定
syagain_zsx1 小时前
spdlog实战:日志分级、滚动与性能调优
linux·c++·日志库·二次开发日志库
考虑考虑7 小时前
JDK26中的Map.ofLazy
java·后端·java ee
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源
鶴哥只手遮天11 小时前
Spring AI 2.0.1 深度解析-第 03 章 消息体系与 Prompt:不可变模型、`ChatOptions` 与模板渲染
java·人工智能·开源