寻找最小公倍数高效算法

理论基础

理论一:

  • 两个数的最小公倍数等于这两个数的乘积除以它们的最大公约数(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;
}
相关推荐
jghhh011 小时前
使用 MATLAB 实现支持向量回归 (SVR) 预测未来数据
算法·matlab
云泽8081 小时前
笔试算法 - 双指针篇(二):四大经典求和题型 + 有效三角形计数问题
c++·算法
刀法如飞2 小时前
【合并已排序数组的三种实现策略,哪一种更可取?】
算法·程序员
王老师青少年编程2 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:种树
c++·算法·贪心·csp·信奥赛·区间贪心·种树
hi_ro_a2 小时前
C++ 哈希表封装 unordered_map /unordered_set
数据结构·c++·算法·哈希算法
Jasmine_llq6 小时前
《B4447 [GESP202512 二级] 环保能量球》
数据结构·算法·数学公式计算(核心)·整数除法算法·多组数据循环处理·输入输出算法·简单模拟算法
蔡大锅7 小时前
🔥 在线学习算力平台推荐-Hyper.AI
人工智能·算法
老唐7777 小时前
常见经典十大大机器学习算法分类与总结
人工智能·深度学习·神经网络·学习·算法·机器学习·ai
wearegogog1237 小时前
动态时间规整(DTW):跨越时间维度的相似性度量
算法
ECT-OS-JiuHuaShan7 小时前
渡劫代谢,好事多磨
数据库·人工智能·科技·学习·算法·生活