寻找最小公倍数高效算法

理论基础

理论一:

  • 两个数的最小公倍数等于这两个数的乘积除以它们的最大公约数(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;
}
相关推荐
专注仿真13 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考14 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
好悬给我拽开线18 小时前
ZILOT 论文解析
算法
饮水桶_T19 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘5619 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi20 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
地平线开发者20 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet21 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞21 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力
青少儿编程课堂1 天前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛