最小公倍数的求法

  • 什么是最小公倍数? 

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

  • 如何求一组数据的最小公倍数(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.mzph.cn/diannao/30559.shtml

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

相关文章

前端页面实现【矩阵表格与列表】

实现页面&#xff1a; 1.动态表绘制&#xff08;可用于矩阵构建&#xff09; <template><div><h4><b>基于层次分析法的权重计算</b></h4><table table-layout"fixed"><thead><tr><th v-for"(_, colI…

可视化表单拖拽生成器优势多 助力流程化办公!

当前&#xff0c;很多企业需要实现流程化办公&#xff0c;进入数字化转型时期。要想实现这一目标&#xff0c;就需要借助更优质的平台产品。低代码技术平台是得到企业喜爱的发展平台&#xff0c;拥有可视化操作、灵活、高效、更可靠等优势特点&#xff0c;在推动企业实现流程化…

记录vue一个echarts页面 柱状图加平均分横线 双柱状图 横向双柱状图

<template><div class"app-container"><el-form :model"queryParams" ref"queryForm" size"small" v-show"showSearch" label-width"85px"><el-form-item label"园所名称" prop&q…

Vue发送http请求

1.创建项目 创建一个新的 Vue 2 项目非常简单。在终端中&#xff0c;进入您希望创建项目的目录(我的目录是D:\vue)&#xff0c;并运行以下命令&#xff1a; vue create vue_test 2.切换到项目目录&#xff0c;运行项目 运行成功后&#xff0c;你将会看到以下的编译成功的提示…

使用二进制安装安装docker

在一些情况下无法使用yum安装docker下面写了一个使用二进制安装docker的文档 官网下载地址https://download.docker.com/linux/static/stable/x86_64/ 可以按需求下载 wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.10.tgz 下载包 tar xf dcker…

要改Google签名?这些你足够了解吗!

大家好&#xff0c;我是小编阿文。欢迎您关注我们&#xff0c;经常分享有关Android出海&#xff0c;iOS出海&#xff0c;App市场政策实时更新&#xff0c;互金市场投放策略&#xff0c;最新互金新闻资讯等文章&#xff0c;期待与您共航世界之海。 老项目keystore签名信息包含国…

瑞数信息入选IDC《中国WAAP厂商技术能力评估,2024》

5星满分&#xff1a;WAF、Bot流量管理、行业应用等评估维度 日前&#xff0c;全球领先的IT市场研究和咨询公司IDC发布《中国WAAP厂商技术能力评估&#xff0c;2024》。报告聚焦WAAP能力&#xff0c;通过对中国市场中主要WAAP产品提供商的技术评估以及对大量最终用户的客观访谈…

一文彻底搞懂 Transformer(图解+手撕)

Transformers 亮相以来彻底改变了深度学习模型。 今天&#xff0c;我们来揭示 Transformers 背后的核心概念&#xff1a;注意力机制、编码器-解码器架构、多头注意力等等。通过 Python 代码片段&#xff0c;让你深入了解其原理。 一、理解注意力机制 注意力机制是神经网络中…

代理设计模式,框架AOP思想

文章目录 引言&#x1f92a;代理对象(Proxy)如何开发一个代理对象开发中的业务层代码冗余问题开发静态代理类动态代理 引言&#x1f92a; 代理 (proxy) &#xff0c;举个生活中常见的现象&#xff0c;在之前网路还未走进大众的时代里&#xff0c;如果我们想买一些东西&#xf…

第十九届全国大学生智能汽车竞赛智慧巡检创意组赛程安排通知

各位老师和同学们大家好&#xff1a; 通知一&#xff1a;经过和大赛组委会、承办校协商确定&#xff0c;天途智慧巡检创意组线下预选赛和总决赛将在吉林大学&#xff08;东北赛区&#xff09;举办&#xff0c;赛程如下&#xff1a; 地点&#xff1a;吉林大学前卫南区体育馆 地…

Nginx之文件下载服务器

1.概述 在对外分享文件时&#xff0c;利用Nginx搭建一个简单的下 载文件管理服务器&#xff0c;文件分享就会变得非常方便。利 用Nginx的诸多内置指令可实现自动生成下载文件列表 页、限制下载带宽等功能。配置样例如下&#xff1a; server {listen 8080;server_name localhos…

有了MES、ERP,质量管理为什么还需要QMS?

在制造业&#xff0c;质量管理始终是企业管理中永恒的主题。品质管理要想做得更好&#xff0c;企业必须掌握足够多、足够有用的数据和信息&#xff0c;实现质量管理信息化。很多中小企业也很困惑&#xff0c;是否有必要上线QMS质量管理系统&#xff1f; 一、为什么企业需要QMS的…

Graph RAG 的力量:智能搜索的未来

随着世界越来越依赖数据&#xff0c;对准确、高效的搜索技术的需求从未如此高涨。传统搜索引擎虽然功能强大&#xff0c;但往往难以满足用户复杂而细微的需求&#xff0c;尤其是在处理长尾查询或专业领域时。Graph RAG&#xff08;检索增强生成&#xff09;正是在这种情况下应运…

Python-Socket网络编程简单示例

# TCP 服务端程序 server.py # 导入socket 库 from socket import *# 主机地址为空字符串&#xff0c;表示绑定本机所有网络接口ip地址 # 等待客户端来连接 IP # 端口号 PORT 50000 # 定义一次从socket缓冲区最多读入512个字节数据 BUFLEN 512# 实例化一个socket对象 # 参…

第1讲:创建vite工程,使用框架为Vanilla时,语言是typescript,修改http端口的方法

直接在项目根目录创建 vite.config.ts文件。 在该文件中添加内容&#xff1a; import { defineConfig } from vite;export default defineConfig({server: {port: 7777,}, });最后尝试运行package.json中的Debug

AI大模型的TTS评测

L-MTL&#xff08;Large Multi-Task Learning&#xff09;Models 是一种大规模多任务学习模型&#xff0c;通过结合 Mixture of Experts&#xff08;MMoE&#xff09;框架与 Transformer 模型&#xff0c;实现对 TTS&#xff08;Text-to-Speech&#xff09;系统中多个评估指标的…

今日分享丨点亮这四个技能,你也可以成为可视化专家

引言 以大数据、人工智能等为代表的新质生产力时代已悄然而至&#xff0c;央企、国企逐步意识到数据资源展示对于经营管理的重要性和紧迫性。数据可视化成为连接用户与数据的桥梁&#xff0c;藉由设计师的巧手&#xff0c;把复杂抽象的数据以基于管理需求&#xff0c;转化为直…

PAT B1018.锤子剪刀布

题目描述 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图3-1所示。 现给出两人的交锋记录&#xff0c;请统计双方的胜、平、负次数&#xff0c;并给出双方分别出什么手势的胜算最大。输入格式 第一行给出正整数N(≤10),即双方交锋的次数。随后N行,每行给…

探索Web Components

title: 探索Web Components date: 2024/6/16 updated: 2024/6/16 author: cmdragon excerpt: 这篇文章介绍了Web Components技术&#xff0c;它允许开发者创建可复用、封装良好的自定义HTML元素&#xff0c;并直接在浏览器中运行&#xff0c;无需依赖外部库。通过组合HTML模…

Top10在线音频剪辑软件,你了解几款?(免费分享)

多年来&#xff0c;随着音乐制作人和音频工程师的需求不断增长&#xff0c;音频剪辑软件领域经历了巨大的发展。最新的音频剪辑软件提供了从基本录制到最终发布所需的一切功能。其中一些软件专为播客设计&#xff0c;一些软件是免费的&#xff0c;并且一些软件提供了出色的音效…