介绍最大公因数和最小公约数(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 类型避免溢出。
相关推荐
一条破秋裤16 小时前
Linux 线程分离与主动取消:pthread_detach、pthread_cancel
java·linux·jvm
wshzd16 小时前
LLM之Agent(104)|DeepSeek-Harness(十三)ReactLoopAgent 总览:kick → turn → step
开发语言·前端·javascript
共享家952716 小时前
C语言-408
c语言·开发语言
茉莉玫瑰花茶16 小时前
OpenGL [ 基础概念 ]
java·前端·数据库
周杰偷奶茶16 小时前
【Java】运算符指南
java·开发语言
随性而行36016 小时前
企业微信二次开发如何接入大模型工具?API接口实现智能任务调用的技术思路
java·前端·人工智能·python·微信·机器人·企业微信
单片机设计·······16 小时前
【dz-1162】汽车前玻璃雨刮器设计
c++·单片机·嵌入式硬件
2601_9669496516 小时前
量化回测中分钟数据应该如何保存?从文件到数据仓库的工程化设计
开发语言·python·pandas·量化交易·股票数据·quantdash
Zhou14113617 小时前
SpringMVC_02_注解开发实战
开发语言·windows·python
AI智讯中枢17 小时前
高性能 C++ 实战 (五):perf+FlameGraph 火焰图生产实战,精准定位 CPU / 缓存 / 锁瓶颈,避坑 + 完整实操案例
linux·c++·性能调优·性能分析·perf·flamegraph·火焰图