【算法学习】最小公倍数问题

前言: 

求最小公倍数的两种算法:

求两个正整数的最小公倍数,比如3和5的最小公倍数是15,6和8的最小公倍数是24。

本片讨论如何求两个数的最小公倍数,第一种方法是通过最大公约数来求,第二种方法是累加法。

由最大公约数求最小公倍数

对于两个正整数a,b,这两个数的乘积等于这两个数的最小公倍数与最大公约数的乘积。

所以可以用该公式求最小公倍数。

计算两个正整数的最小公倍数(LCM),可以通过最大公约数(GCD)和公式LCM(a,b)=(a*b)/GCD(a,b)实现。即LCM(a,b)=(a*b)/GCD(a,b)。所以只需求出最大公约数即可。

求最大公约数有两种算法:

1,辗转相除法(欧几里得算法)

其基本步骤如下:

  • 用较大数除较小数,得到余数
  • 用余数继续除上一次的除数,直到除数为0
  • 最后的除数就是最大公约数


例如求91 和 49的最大公约数:

91/49=1......42

49/42=1......7

42/7=6......0

可以得到最大公约数为7。以除数和余数反复做除法运算,当余数为0时,取当前除数为最大公约数


代码实现:

自定义实现GCD函数

计算最大公约数
//int gcd(int a, int b)
//{
//	while (b != 0)
//	{
//		int tmp = b;
//		b = a % b;
//		a = tmp;
//	}
//	return a;
//}
int gcd(int a, int b)
{if (a % b == 0)return b;elsereturn gcd(b, a % b);
}
//计算最小公倍数
long long lcm(int a, int b)
{if(a==0||b==0)  return 0;return (a * b) / gcd(a, b);
}

 使用C++17标准库中的std::gcd。

需包含头文件<numeric>,并使用C++17或更高标准编译。

#include <iostream>
#include <numeric>
using namespace std;long long lcm(int a, int b)
{return (a * b) / std::gcd(a, b);
}
int main()
{int a = 12, b = 18;cout << lcm(a, b) << endl;return 0;
}

总结: 

  1. 公式推导
    利用数学关系:LCM(a, b) × GCD(a, b) = |a × b|

  2. 处理零的情况
    如果任一数为零,直接返回 0(因为零和任何数的 LCM 是零)。

  3. 防止整数溢出
    将 a * b 转换为 long long 类型,避免乘法溢出(例如 a = 1e9b = 1e9)。

  4. 处理负数
    使用 std::abs 保证计算的数值为正,避免符号干扰。

2,辗转相减法

若a>b,则a=a-b(大的数减去小的数)

若a=b,则a或b就是最大公约数


如求35和14的两个最小公倍数:

35-14=21;

21-14=7;此时7小于14,要做一次交换

14-7=7;

7-7=0;此时可以求出最大公约数位7


//a-b辗转相减法
int gcd(int a, int b)
{if (a < b){//交换int c = a;a = b;b = c;}if (a == b)return a;else{return gcd(b, a - b);}
}
long long lcm(int a, int b)
{if (a == 0 || b == 0) return 0;return (a * b) / gcd(a, b);
}

累加法

又称穷举法。设正数a。最后的最小公倍数一定是a,b的倍数。所以任选a,b一个作为循环变量,假设是a,若变量值除以b可以除尽,则此时的变量就是最小公倍数,否则变量依次+a。

long long lcm(int a, int b)
{int i = 0;for (int i = a;; i += a)if (i % b == 0)return i;
}

多个数的最小公倍数(扩展)

对于多个数的LCM,可以使用递归解决。

#include <iostream>
#include <vector>
using namespace std;
//辗转相除法
int gcd(int a, int b)
{if (a % b == 0)return b;elsereturn gcd(b, a % b);
}
//计算最小公倍数
long long lcm(int a, int b)
{return (a * b) / gcd(a, b);
}
long long lcm_mutiple(vector<int> num)
{if (num.size() == 0) return 0;long  long result = 1;for (int x : num)result = lcm(result, x);return result;
}
int main()
{cout << lcm_mutiple({ 2,5,9 }) << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36955.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Deepseek+飞书实现简历分析建议+面试题

步骤一&#xff1a;创建多维表格 点击云文档点击主页点击新建创建多维表格 步骤二&#xff1a;创建列 首先将多余的列进行删除 创建简历内容列&#xff0c;类型使用文本&#xff0c;目的是将简历内容复制进来 创建AI列&#xff1a;简历分析、简历建议、面试题 点击确定后&…

Linux基础开发工具--gdb的使用

目录 安装准备&#xff1a; 1. 背景 2. 开始使用 3. 做一个Linux第一个小程序&#xff0d;进度条 安装准备&#xff1a; 对于gdb的学习使用&#xff0c;为了方便大家学习&#xff0c;我建议大家先安装一个cgdb进行学习&#xff0c;这样方便观察操作与学习gdb。 用以下…

leetcode热题100道——两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。 示例 1…

某公司制造业研发供应链生产数字化蓝图规划P140(140页PPT)(文末有下载方式)

详细资料请看本解读文章的最后内容。 资料解读&#xff1a;某公司制造业研发供应链生产数字化蓝图规划 在当今制造业数字化转型的浪潮中&#xff0c;企业信息化建设成为提升竞争力的关键。本资料围绕 XX 公司的信息化建设展开&#xff0c;涵盖业务战略、信息化路线图、各领域系…

【总结篇】java多线程,新建线程有几种写法,以及每种写法的优劣势

java多线程 新建线程有几种写法,以及每种写法的优劣势 [1/5]java多线程 新建线程有几种写法–继承Thread类以及他的优劣势[2/5]java多线程-新建线程有几种写法–实现Runnable接口以及他的优劣势[3/5]java多线程 新建线程有几种写法–实现Callable接口结合FutureTask使用以及他的…

GB9706.1-2020附件J绝缘路径参考

下图为GB9706.1-2020绝缘路径示例图&#xff0c;附件J。 MOOP&#xff1a;对操作者的防护措施 MOPP&#xff1a;对患者的防护措施 1、保护接地外壳&#xff0c;网电源及次级电路与外壳之间。 网电源-外壳&#xff1a;1MOOP 次级电路-外壳&#xff1a;1MOOP 2、未保护接地外壳&…

基于springboot的教务系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 这些年随着Internet的迅速发展&#xff0c;我们国家和世界都已经进入了互联网大数据时代&#xff0c;计算机网络已经成为了整个社会以及经济发展的巨大动能&#xff0c;各个高校的教务工作成为了学校管理事务的重要目标和任务&#xff0c;因此运用互联网技术来提高教务的…

大模型+知识图谱:赋能知识智能新升级

在大模型&#xff08;Large Language Model, LLM&#xff09;飞速发展的今天&#xff0c;如何把传统行业中沉淀多年的大量结构化与非结构化数据真正“用起来”&#xff0c;正成为推动智能化转型的关键一步。 找得到&#xff0c;看得懂&#xff0c;为何很难&#xff1f; 以制造…

Qt6+QML实现Windows屏幕录制

前言 Qt6提供了更丰富的多媒体支持类&#xff0c;使用Qt6 QMediaCaptureSession、QScreenCapture、QMediaRecorder&#xff0c;来实现一个屏幕录制的demo&#xff0c;其中QScreenCapture 最低版本 Qt6.5。支持录制的清晰度设置&#xff0c;选择视频保存位置&#xff0c;UI使用…

Java---SpringMVC(2)

下文使用postman模拟客户端传递信息。 1.postman传参介绍 1.1传递单个参数 1.2传递多个参数 注意事项 使⽤基本类型&#xff08;int...&#xff09;来接收参数时, 参数必须传(除boolean类型), 否则会报500错误 类型不匹配时, 会报400错误 对于包装类型, 如果不传对应参数&a…

MySQL为什么默认使用RR隔离级别?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL为什么默认使用RR隔离级别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR (Repeatable Read) …

人工智能之数学基础:线性方程组求解的得力助手——增广矩阵

本文重点 增广矩阵是一个极具实用价值的工具,尤其在处理线性方程组时,它展现了卓越的功效。通过整合系数和常数项,增广矩阵简化了计算过程并提供了判断方程组解集的有效方法。 增广矩阵的起源与定义 增广矩阵的概念源于线性方程组求解的需求。在解决线性方程组时,我们常…

【Axure高保真原型】增删改饼图

今天和大家分享能增删改的饼图的原型模版&#xff0c;该模版是用Axure原生元件制作的&#xff0c;所以不需要联网或者调用外部接口&#xff0c;使用也很方便&#xff0c;默认数据在中继器表格里填写&#xff0c;默认支持20个不同颜色的扇形&#xff0c;后续可根据实际需要自己增…

WordPress系统获取webshell的攻略

一.后台修改模板拿WebShell 1.进入Vulhub靶场并执⾏以下命令开启靶场&#xff1b;在浏览器中访问并安装好 #执⾏命令 cd /vulhub/wordpress/pwnscriptum docker-compose up -d 2. 修改其WP的模板&#xff0c;登陆WP后点击 【外 观】 --》 【编辑】 --》 404.php 3.插入一句话木…

Java反序列化CommonsBeanutils无依赖打Shiro

说明 如果您之前未了解过 Commons Collections&#xff08;CC&#xff09;利用链&#xff0c;建议您先阅读相关基础文章&#xff0c;然后再回头阅读此文章。这样可以更好地理解其中的内容 Java反序列化-Commons Collections3利用链分析详解 Java反序列化-Commons Collections…

用curl和python通过网络测试Ollama服务器的配置和状态

当一个Ollama服务器创建好后&#xff0c;除了用ollama指令来测试&#xff0c;还可以使用curl和python来通过网络测试Ollama的配置是否正确&#xff0c;远程是否能正常连上并与服务器进行交互。 目录 启动Ollama服务器 下载模型 curl测试 检查服务器状态 列出已安装的模型…

蓝桥杯青少组stema2025年3月9日scratch初级组真题——转动的图形

完整题目可查看&#xff1a; 转动的图形_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/scratch/show-5106.html?_shareid3 程序演示可查看&#xff1a; 转动的图形-scratch作品-少儿编程题库学习中心-嗨信奥https://www.hixinao.com/scratch/creation…

杰理科技JL703N双模蓝牙芯片—云信

杰理科技JL703N芯片运算能力、接收灵敏度、发射功率、音频性能等指标均处于行业一流水平&#xff0c;能满足多场景的应用需求&#xff0c;具有以下明显优势&#xff1a; 一、高性能双核浮点CPU&#xff0c;算力十足 JL703N芯片搭载了32位高性能双核CPU&#xff0c;主频高达32…

Asp.net Core API 本地化

本文是一个demo&#xff0c;演示了如何根据用户接口查询字段(正常放header中),设置当前culture&#xff0c;并获取当前culture的key value给用户提示 创建Resources文件夹&#xff0c;添加以下三个文件 其中ExceptionUnuse 是一个空的类&#xff0c;供IStringLocalizer使用&a…

工业相机选型

工业相机选型 一、工业相机分类二、相机的主要参数2.1 分辨率2.2 速度2.3 光学接口 / 接口类型2.4 相机靶面尺寸2.5 像元尺寸2.6 精度 三、镜头介绍及选型方法3.1 工作距离&#xff08;WD&#xff09;3.2 视场角(FOV)3.3 &#xff08;镜头&#xff09;靶面尺寸3.4 帧率3.5 光圈…