寻找最小公倍数高效算法

理论基础

理论一:

  • 两个数的最小公倍数等于这两个数的乘积除以它们的最大公约数(GCD)。
  • 即 LCM(a, b) = |a*b| / GCD(a, b)

例如,求12和18的最小公倍数:

  • GCD(12, 18) = 6
  • LCM(12, 18) = |12*18| / 6 = 216 / 6 = 36
    理论二:

辗转相除法,也称为欧几里得算法,是一种用于寻找两个整数最大公约数的高效算法。

假设我们想要找到81和153的最大公约数。

  1. 153除以81,商为1,余数为72。
  2. 然后用81除以72,商为1,余数为9。
  3. 再用72除以9,商为8,余数为0。

这时余数为0,所以在上一步中,9就是153和81的最大公约数。

cpp 复制代码
//C++代码实现
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int getGCD(int did, int div) {	//辗转相除法
	while(did % div) {
		int red = did % div;
		did = div;
		div = red;
	}
	return div;
}

int main(int argc, char** argv) {
	srand(time(0));
	int res1 = rand()%1001;
	int res2 = rand()%801;
	
	int gcd = getGCD(res1, res2);
	cout<<"The GCD is "<<gcd<<endl;
	
	int lcm = res1 * res2 / gcd;
	cout<<"The LCM of "<<res1<<" and "<<res2<<" is "<<lcm;
	return 0;
}
相关推荐
啥咕啦呛21 小时前
跟着AI学Java第2天:Java基础语法巩固
java·python·算法
csuzhucong21 小时前
螺旋归纳DP
算法
qeen8721 小时前
【算法笔记】模拟与高精度加减乘除
c++·笔记·算法·高精度·模拟
鱼很腾apoc1 天前
【学习篇】第17期 C++入门必看——类和对象全站最详篇
c语言·开发语言·学习·算法·青少年编程
zzzsde1 天前
【Linux】进程信号(1)理解信号及信号产生的方式
linux·运维·服务器·算法
啊哦呃咦唔鱼1 天前
LeetCode双指针合集
算法·leetcode·职场和发展
WolfGang0073211 天前
代码随想录算法训练营 Day37 | 动态规划 part10
算法·动态规划
baizhigangqw1 天前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二)
算法·启发式算法·web app
alphaTao1 天前
LeetCode 每日一题 2026/4/13-2026/4/19
算法·leetcode·职场和发展
灵智实验室1 天前
PX4姿态解算技术详解(四):姿态更新/递推与共锥补偿
算法·无人机·px 4