最小公倍数的求法

news2025/2/26 18:17:25
  • 什么是最小公倍数? 

最小公倍数是指两个或多个整数共有的最小正整数倍数。

  • 如何求一组数据的最小公倍数(Least Common Multiple,简称LCM)? 

       LCM = 这组数据的公倍数   \div  这组数据的最大公约数 (Greatest Common Divisor,简称GCD)

例如:两个数a和b,它们的最小公倍数lcm(a, b)可以通过它们的乘积除以它们的最大公约数gcd(a, b)来得到,即:lcm(a,b) =  \frac{a*b}{gcd(a, b))}  ,所以求最小公倍数的问题重点就转换成了求最大公约数。

  • 如何求最大公约数?欧几里得算法: gcd(a,b)

欧几里得算法,又称为“辗转相除”法,顾名思义, 这个算法的核心思想就是不断的去除。它是迄今为止已知的最古老的算法,距今(2024年)已经有2324年了,这个算法可用于快速计算两个数字的最大公约数的。

定理:a 和 b两个整数的最大公约数等于 b 与  a%b 的最大公约数。

通过定理的表述,我们发现,问题规模从[b,a] 缩小到了为了[b, a%b],即问题规模从原始规模缩小到了原始规模的子规模,但是问题的解没有变,也就是说,子规模中蕴含着原始问题的解。

所以,我们要证明两点:

第一: 在子规模中包含原始规模的解;

第二:在子规模中找到的答案就是最大公约数,而不仅仅是公约数之一。

证明问题一:

如果我们能证明 a 和 b 的最大公约数,同时也能被 a % b 整除 (是a%b的因子),那么就可以说原始规模的问题的解是包含在子规模中的。

              设 a和b 的最大公约数 为c :即 c = gcd(a,b), 则: a = cx, b = cy;

              假设: a % b = r; 

              那么:r = a - kb = cx - kcy = c(x-ky) 

              所以:c 也是 r 的因子。

证明问题二:

如果我们想证明 gcd(b, a%b ) 得到的就是最大公约数,那么只要证明 b 和 (a%b)除了c之外再无公约数即可,又因为b = cy, a%b = c(x-ky) , 即只要能能证明 y 和 (x-ky)互为素数即可。

             假设: gcd(x-ky, y) = d;

             则 y = nd,

             x-ky = md ; \Rightarrow  x = md+ky \Rightarrow x = (m+kn)d;

             所以,a 和 b 可以表示成: a = cd(kn +m), b = cdn,  进而可知:gcd(a,b) >= cd ,

             又因为 gcd(a,b) = c, 

             所以 d=1, y 和 (x-ky)的公约数为1, 说明y 和(x-ky) 互为素数。

 题目1:2520是最小的能够被1到10整除的正数。最小的能够被1到20整除的正数是多少?

题目分析:

根据题目描述,就是要找到1到20的最小公倍数。

代码实现:

#include <stdio.h>

//求整数a 和 b 的最大公约数
int gcd(int a, int b){
    if(b == 0) return a;
    return gcd(b, a%b);
}


//求整数a 和 b 的最小公倍数
long lcm(long a, long b){
    return a*b / gcd(a, b);
}

//求1到20 的最小公倍数
int main(){
    long long ans = 1;
    for(int i = 2; i <= 20; i++) ans = lcm(ans, i);
    printf("%lld\n", ans);
    return 0;
}

小技巧:

在上述代码中,函数 long lcm(long a, long b) ,有两点需要注意,第一,为了不出现数据溢出现象,数据类型定义为long, 第二, 同样是为了不出现数据溢出, a*b/gcd(a,b)  这个运算语句,应该改为先 a /gcd(a, b) * b,  即先执行除法再做乘法,以免先乘法生产一个超出数据范围的大数据。

//求整数a 和 b 的最小公倍数
long lcm(long a, long b){
    return a / gcd(a, b) * b;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis-基础篇(1)

黑马redis-基础篇笔记 1. 初识redis REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的…

利用Systemverilog+UVM搭建SOC及ASIC的RTL验证环境

在集成电路设计的复杂世界中&#xff0c;验证环节是确保设计满足预期功能和性能要求的关键步骤。随着系统级芯片&#xff08;SOC&#xff09;和特定应用集成电路&#xff08;ASIC&#xff09;的规模和复杂性不断增加&#xff0c;传统的验证方法已经难以满足高效、准确的验证需求…

秋招突击——6/19——新作{括号生成、合并K个排序链表}

文章目录 引言新作括号生成个人实现实现时遇到的问题实现代码 参考思路实现代码 合并K个有序链表个人实现实现代码 参考实现实现代码 总结 引言 今天把第二篇论文投了&#xff0c;后续有审稿意见再说&#xff0c;然后在进行修改的。后续的生活要步入正轨了&#xff0c;每天刷题…

21.0docker企业级镜像仓库harbor(vmware 中国团队)

docker企业级镜像仓库harbor(vmware 中国团队) 网站下载harbor软件包 https://github.com/goharbor/harbor 查看软件安装harbor版本需求限制 本地环境需求已满足 点击下载harbor安装包 点击releases根据版本信息下载 下面的在线安装就是docker pull。离线就是下载之后…

上海中腾食品科学餐饮管理铸就企业食堂新模式

在当今企业运营中&#xff0c;食堂不仅是员工用餐的场所&#xff0c;更是企业文化和管理水平的体现。随着餐饮行业的不断发展&#xff0c;科学合理的餐饮管理模式成为了企业食堂成功的关键。上海中腾食品科技有限公司以其独特的餐饮管理模式&#xff0c;成功打造了企业食堂的新…

CSS3中鲜为人知但非常强大的 Clip-Path 属性

CSS3中鲜为人知但非常强大的 Clip-Path 属性 在CSS3中,clip-path属性可以让我们快速创建各种各样的不规则图形,而无需使用图片或者复杂的绘图工具。它可以帮助我们实现一些非常出色的视觉效果,但遗憾的是它并不是很常见。 clip-path属性可以接受多种不同的值,比如polygon()、…

AI网络爬虫:用deepseek批量提取coze扣子的智能体数据

动态加载页面&#xff0c;返回json数据&#xff1a; 翻页规律&#xff1a; https://www.coze.cn/api/marketplace/product/list?entity_type1&keyword&page_num17&page_size24&sort_type1&source1&msToken8_renFdIfix-XVFJAqAj8F_gSPv1V5A8NX_iL2teO…

【Java学习笔记】异常处理

生活中我们在使用一些产品的时候&#xff0c;经常会碰到一些异常情况。例如&#xff0c;使用ATM机取钱的时&#xff0c;机器会突然出现故障导致无法完成正常的取钱业务&#xff0c;甚至吞卡&#xff1b;在乘坐地铁时&#xff0c;地铁出现异常无法按时启动和运行&#xff1b;使用…

windows pyenv-win:pyenv 下载过慢

先到官网下载指定版本的 exe 文件 Python Releases for Windows | Python.org 根据自己电脑的 下载 32 或者 64 下载完成后将 exe 放入 install_cache 再到 powershell 中执行安装指令 pyenv install 3.12.4

LLM漫谈(七)| 使用PyTorch从零构建LLM

LLM是最流行AI聊天机器人的核心基础&#xff0c;比如ChatGPT、Gemini、MetaAI、Mistral AI等。在每一个LLM&#xff0c;有个核心架构&#xff1a;Transformer。我们将首先根据著名的论文“Attention is all you need”-https://arxiv.org/abs/1706.03762 来构建Transformer架构…

天津媒体邀约,及媒体名单?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 天津作为中国北方的重要城市&#xff0c;拥有丰富的媒体资…

OpenCV 车道检测

OpenCV 车道检测 前言模型分析车道检测相关链接 前言 如果要检测道路图像中的车道&#xff0c;方法之一是利用深度学习的语义分割技术。而在 OpenCV 中解决此问题可以使用边缘检测器。在本节中&#xff0c;我们将了解如何使用边缘检测和直线检测识别道路图像中的车道。 模型分…

C语言----自定义类型:联合和枚举

1.联合体 联合体的特点 像结构体一样&#xff0c;联合体也是一个或者多个成员构成的&#xff0c;这些成员可以是不同的类型 联合体的关键字&#xff1a;union 结构体的关键字&#xff1a;struct 枚举的关键字&#xff1a;enum 但是编译器只为最⼤的成员分配⾜够的内存空间…

如何查看公网IP?

什么是公网IP&#xff1f; 公网IP&#xff08;Internet Protocol&#xff09;是指分配给互联网上的计算机设备的唯一标识符。公网IP地址是由互联网服务提供商&#xff08;ISP&#xff09;分配给用户设备&#xff0c;使其可以与全球范围内的其他设备进行通信。公网IP地址通常采…

Internet Download Manager(IDM6.41)软件最新版下载及详细安装教程

​根据行业数据显示支持多款浏览器&#xff0c;包括IE&#xff0c;Safari&#xff0c;谷歌浏览器&#xff0c;火狐&#xff0c;MSN还有opera &#xff0c;通过自带的添加浏览器功能能够支持所有浏览器。实际上 一键下载所选文件&#xff1a;当在浏览器中用鼠标选择多个链接时&…

Spring Boot轻松整合Minio实现文件上传下载功能

一、Linux 安装Minio 安装 在/root/xxkfz/soft目录下面创建文件minio文件夹&#xff0c;进入minio文件夹&#xff0c;并创建data目录&#xff1b; [rootxxkfz soft]# mkdir minio [rootxxkfz soft]# cd minio [rootxxkfz minio]# mkdir data执行如下命令进行下载 [rootxxkfz…

【漏洞复现】极限OA video_file.php 任意文件读取漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

在 Mac 上恢复已删除的文件夹

“嗨&#xff0c;我刚刚运行了重复文件查找器应用程序 Gemini 来扫描我的 Mac 以清除重复文件。它找到了很多重复的文件和文件夹&#xff0c;只需单击一下&#xff0c;它就可以帮助我删除重复的文件/文件夹。但我认为它可能会删除一些有用的重复文件。我打开垃圾箱&#xff0c;…

Docker环境离线安装

Docker环境离线安装 下载下列.deb包 sudo *.deb

CFD笔记

CFD 定常流动与非定常流动 定常流动&#xff1a;流体流动过程中各物理量均与时间无关; 非定常流动&#xff1a;流体流动过程中某个或某些物理量与时间有关. 运动黏度 运动粘度定义&#xff1a; v μ ρ v \frac{\mu}{\rho} vρμ​&#xff0c;其中 μ \mu μ​表示粘度…