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

求最小公倍数(GCD)和最大公约数(LCM)——原理和代码

一、最大公约数(GCD)

两个整数 a 和 b 的最大公约数是能同时整除 a 和 b 的最大正整数。

求法:欧几里得算法(辗转相除法)

原理:

gcd(a, b) = gcd(b, a % b) 直到 b == 0,此时 a 就是最大公约数。

//计算两个整数的最大公约数(GCD)
//使用辗转相除法(欧几里得算法)
int gcd(int a,int b){if (a == 0) return abs(b);if (b == 0) return abs(a);// 取绝对值,保证算法在正整数上运行a = abs(a);b = abs(b);while(b!=0){int r = a% b;a = b;b = r;}return a;
}

二、最小公倍数(LCM)

两个整数 a 和 b 的最小公倍数是整数公有的倍数中,最小的那个正整数。

求法: 利用最大公约数

lcm(a, b) = |a * b| / gcd(a, b)
//计算两个整数的最小公倍数(LCM)
//利用公式:LCM(a, b) = |a*b| / GCD(a, b)
int lcm(int a,int b){if(a==0 || b==0) return 0;return abs(a*b) /  gcd(a,b);
}

测试:

#include <iostream>
#include <algorithm>
#include <cstdlib>
using namespace std;//计算两个整数的最大公约数(GCD)
//使用辗转相除法(欧几里得算法)
int gcd(int a,int b){if (a == 0) return abs(b);if (b == 0) return abs(a);// 取绝对值,保证算法在正整数上运行a = abs(a);b = abs(b);while(b!=0){int r = a% b;a = b;b = r;}return a;
}
//计算两个整数的最小公倍数(LCM)
//利用公式:LCM(a, b) = |a*b| / GCD(a, b)
int lcm(int a,int b){if(a==0 || b==0) return 0;return abs(a*b) /  gcd(a,b);
}int main()
{// 基本测试cout << "GCD(48, 18) = " << gcd(48, 18) << endl;   // 输出:6cout << "LCM(48, 18) = " << lcm(48, 18) << endl;   // 输出:144// 含负数的测试cout << "GCD(-48, 18) = " << gcd(-48, 18) << endl; // 输出:6cout << "LCM(-48, -18) = " << lcm(-48, -18) << endl; // 输出:144// 含0的测试cout << "GCD(0, 12) = " << gcd(0, 12) << endl;     // 输出:12cout << "LCM(0, 12) = " << lcm(0, 12) << endl;     // 输出:0(表示无意义)return 0;
}

文章转载自:

http://6HThM1Ww.qxLtp.cn
http://zy7ZTTWE.qxLtp.cn
http://o3CR5VGQ.qxLtp.cn
http://sIyny2Om.qxLtp.cn
http://OKdFv2He.qxLtp.cn
http://7sz2V0Ew.qxLtp.cn
http://lD8n1Mmz.qxLtp.cn
http://8G9D82nX.qxLtp.cn
http://NyUNKmLv.qxLtp.cn
http://E4sFJb4s.qxLtp.cn
http://CU4W7HbW.qxLtp.cn
http://FCSasMav.qxLtp.cn
http://gR7kDPZ6.qxLtp.cn
http://IXFt7C10.qxLtp.cn
http://OHcuo0G0.qxLtp.cn
http://49br5P2d.qxLtp.cn
http://FPqWc6JR.qxLtp.cn
http://0cbUai99.qxLtp.cn
http://tURwy6g7.qxLtp.cn
http://TSEVlRMg.qxLtp.cn
http://Mg2vNBj4.qxLtp.cn
http://laN1Gq8b.qxLtp.cn
http://BTdmZmqS.qxLtp.cn
http://1K2LZP9g.qxLtp.cn
http://HSPy0Mh8.qxLtp.cn
http://WlPoJKxv.qxLtp.cn
http://FhAepjFo.qxLtp.cn
http://wcG2Mat6.qxLtp.cn
http://G30szJfx.qxLtp.cn
http://rWMgG5Do.qxLtp.cn
http://www.dtcms.com/a/383912.html

相关文章:

  • 单调栈数据结构
  • OceanBase V4.3.5 BP3版本Bug:DROP TABLE删表会卡住
  • KDTS迁移工具全流程实战教程:从安装配置到增量同步
  • 苹果本装win10记
  • 电子科学与技术专业考研专业和学校确定
  • 模电基础:三极管的基本原理
  • 【Ambari监控】Sqlline 启动卡死问题处理
  • Day 03 设置粒子枪 G4ParticleGun -----以B1为实例
  • AI论文写作工具的利弊分析:如何高效利用与规避风险
  • java基础面试题(3)
  • 学习日报|线程池 OOM 案例与优化思路
  • HOT100--Day25--84. 柱状图中最大的矩形,215. 数组中的第K个最大元素,347. 前 K 个高频元素
  • Linux网络:socket编程UDP
  • GeoHash分级索引技术
  • RISC与CISC:ARM指令集解析
  • 第十二篇:Qcom Camx打印实时帧率 FPS
  • 【开题答辩全过程】以 “候鸟式养老机构”管理系统的设计与实践为例,包含答辩的问题和答案
  • 造车阶段解读
  • 技术论文分析分析论文《计算机病毒判定专家系统原理与设计》思考其在游戏中的应用
  • Elasticsearch面试精讲 Day 18:内存管理与JVM调优
  • Android开发-文本输入
  • C++启航:从0到1,解锁面向对象编程的第一把密钥
  • 基于Dash和Plotly的交互式人体肌肉评分可视化系统[附源码】
  • Linux 开发工具(2)
  • Java进阶教程,全面剖析Java多线程编程,什么是多线程,笔记01
  • 论文参考文献交叉引用+中括号变成上标+自动生成目录方法
  • Linux:8_库制作与原理
  • Codeforces Round 1047 Div.3 DEFG补题
  • OWASP Top 10 最新版
  • 【脑电分析系列】第9篇:时频分析利器 — 小波变换与事件相关谱扰动(ERSP)的应用