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

每日c/c++题 备战蓝桥杯(求解三个数的最大公约数与最小公倍数)

求解三个数的最大公约数与最小公倍数(C/C++实现)

引言

在数学计算和编程问题中,求多个数的**最大公约数(GCD)最小公倍数(LCM)**是常见需求。本文将探讨如何高效求解三个数的GCD和LCM,并提供完整的C/C++代码实现。


基本概念

最大公约数(GCD)

两个或多个整数的最大公约数是能整除这些数的最大正整数。例如,12和18的GCD是6。

扩展到三个数
三个数a、b、c的GCD可通过分步计算:GCD(GCD(a, b), c)

最小公倍数(LCM)

两个或多个整数的最小公倍数是能被这些数整除的最小正整数。例如,4和6的LCM是12。

扩展到三个数
三个数的LCM可通过分步计算:LCM(LCM(a, b), c)


算法思路

  1. GCD算法:使用欧几里得算法(辗转相除法)。

    • 计算两个数的GCD:GCD(a, b) = GCD(b, a % b),直到余数为0。
    • 对三个数,先计算前两个数的GCD,再与第三个数求GCD。
  2. LCM算法:基于公式 LCM(a, b) = |a*b| / GCD(a, b)

    • 对三个数,先计算前两个数的LCM,再与第三个数求LCM。

代码实现(C++)

#include <iostream>
using namespace std;

// 计算两个数的最大公约数
int gcd(int x,int y)
{
    int tem = x%y;
    while(x%y)
    {
        x=y;
        y=tem;
        tem = x%y;
    }
    return y;
}

// 计算三个数的最大公约数
int gcd_three(int a, int b, int c) {
    return gcd(gcd(a, b), c);
}

// 计算两个数的最小公倍数
int lcm(int a, int b) {
    return abs(a * b) / gcd(a, b);
}

// 计算三个数的最小公倍数
int lcm_three(int a, int b, int c) {
    return lcm(lcm(a, b), c);
}

int main() {
    int a, b, c;
    cout << "请输入三个正整数:";
    cin >> a >> b >> c;
    
    cout << "最大公约数:" << gcd_three(a, b, c) << endl;
    cout << "最小公倍数:" << lcm_three(a, b, c) << endl;
    
    return 0;
}

输入输出示例

请输入三个正整数:12 18 24
最大公约数:6
最小公倍数:72

总结

  • 时间复杂度:欧几里得算法的时间复杂度为 O(log(min(a, b))),分步计算三个数的GCD/LCM仍保持高效。

  • 扩展性:此方法可推广至更多数的计算(如四数、五数)。

  • 注意事项

    输入应为正整数。

    计算a*b时可能溢出,实际应用中建议使用long long类型。

    通过分治策略和数学公式的结合,我们能够简洁高效地解决多数的GCD和LCM计算问题。

相关文章:

  • CANoe CAPL——Ethernet CAPL函数
  • btrfs , ext4 , jfs , xfs , zfs 对比 笔记250406
  • 前端知识-CSS3
  • Java Properties 类详解
  • 基于winform的串口调试助手
  • Nginx负载均衡时如何为指定ip配置固定服务器
  • 25.6 多模态AI类型系统实战:日均10万请求下的99.99%可靠性保障与10倍性能提升
  • 《Java八股文の文艺复兴》第十篇:量子永生架构——对象池的混沌边缘
  • C# 属性(Property)
  • 双向链表示例
  • FreeRTOS任务创建和删除(静态)
  • 蓝桥杯嵌入式比赛的做题步骤总结!
  • Elastic 的 OpenTelemetry 分发版(EDOT)现已正式发布:开源、可用于生产环境的 OTel
  • 【HFP】蓝牙HFP应用层核心技术研究
  • 23种设计模式中的观察者模式
  • 26考研 | 王道 | 数据结构 | 第五章 树
  • mybatis plus 实体类基于视图,更新单表的时候报视图或函数‘v_视图名‘不可更新,因为修改会影响多个基表的错误的简单处理方法。
  • 基于BP神经网络的杂草智能识别系统(杂草识别、Python项目)
  • mac安装浏览器闪退处理
  • 【ARTS】【LeetCode-2873】有序三元组中的最大值!
  • 深圳彩页设计/seo的流程是怎么样的
  • 网站开发原型 图/win7优化大师好不好
  • 做网站需要什么权限/北京建站公司
  • 独立购物网站建设/网络seo优化
  • 坪山网站建设价位/长沙网站开发
  • 网站手机版怎么做/网络推广优化工具