最大公约数、最小公倍数

简介: 文将介绍如何证明求解最大公约数、最小公倍数的正确性

一、前言  

我们很早接触数学的时候就听说过最大公约数最小公倍数,数学老师教我们用短除法一直求公因数,最后把求得的公因数相乘就是最大公因数,而最大公因数乘于最后无法再用短除法除的数就是最小公倍数。


image.png


 到了大学学习编程,肯定会遇到求最大公约数最小公倍数的练习题,这个时候我们该怎么把这些方法用编程语言写出来并且让计算机能够运行呢?


我们查阅资料很容易知道,求两个数(a,b)的的最大公约数和最小公倍数,先求 a%b得到c,然后让a=b ,b = c 继续重复此过程最后当c = 0,b就是最大公约数(或者b赋值为0 此时a为最大公约数),然后最小公倍数 = a*b / 最大公约数。


这样我们写代码解决最大公约数和最小公倍数就很简单了,但是不知道大家想过一个问题没有,为什么这么算,这样算为什么就是对的?本文将介绍如何证明求解方法的正确性。


二、证明

约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。(补充概念)

1.证明辗转相除法(欧几里得算法)

我们用的求解最大公约数的方法叫做辗转相除法,也称为欧几里得算法。这个方法的核心也就是我们”辗转“的前提是 默认 等式 gcd(a,b) = gcd(b,a%b)成立  ( gcd表示最大公约数,假设求a、b两非负整数的最大公约数。

我们要证明这个算法正确就是证明gcd(a,b) = gcd(b,a mod b)等式成立。


1.设 u 为a ,b的任意一个公约数,令 a = s * u , b = t * u,q =  

r = a % b

则 r = a - b * q = s * u - t * u * q  = ( s - t * q) * u   所以 r是u的倍数,u为r的约数

则   结论1:任意a与b的公约数都是 r 的约数,也就是b和r的公约数

2.设 v 为 b ,r 的任意一个公约数 令 b = m * v ,r = n * v

由上述可知 r = a % b = a - q * b  

得 a = r + q * b  = n * v + q * m * v = v (n + q * m )  所以a是v得倍数,v是a得约数

结论2:任意 b 与 r 得公约数都是 a 的约数,也是a、b的公约数

设A为a、b的公约数的集合   ,B为b、r的公约数的集合。


image.png




且 任意 x ∈ B ,任意 y∈A  ,故A = B

a、b的最大公约数就是集合A中的最大值,

b、r的最大公约数就是集合B中的最大值


所以 gcd(a,b) = gcd (b,a mod b),即证。


2.证明求最小公倍数法

设 两非负整数 a、b ,gcd(a,b)为 a、b 两数的最大公约数,求证:最小公倍数 Lcm = a * b / gcd(a,b)

在证明这个之前,我们先证明一个辅助条件。

假设 非负整数 a,b,c,d ,有gcd(a,c)= 1,gcd(b,d)= 1 ,a * b = c * d

证明  a = d,b = c   (gcd为最大公约数)

令 x = a * b = c * d       对 x a b c d 分解质因子得:

image.png



gcd(a,c)= 1,gcd(b,d)= 1


image.png


设 G = gcd (a,b) a = G * s, b = G * t  则gcd(s,t)= 1 互质

设最小公倍数 L = a * m = b * n 则 gcd(m,n)= 1 互质

由 a * m = b * n ,a = G * s ,b = G * t

得G * s * m = G * t *n        所以s * m = t * n

使用辅助条件得 m = t, s = n

L = a * m = a * m * G / G = a * t * G / G = a * b / G  即证


综上,证明了求解最大公约数和最小公倍数的方法的正确性!!!


相关文章
|
缓存 网络协议 安全
计算机网络 TCP、RPC、GRPC、HTTP 对比
【1月更文挑战第1天】计算机网络 TCP、RPC、GRPC、HTTP 对比
|
4月前
|
机器学习/深度学习 开发者 内存技术
阶跃星辰 Step 3.5 Flash 预训练/中训练/训练框架全部开源!
阶跃星辰开源Step 3.5 Flash——迄今最强开源Agent基座模型,含Base/Midtrain权重及Steptron全栈训练框架,支持预训练、SFT与强化学习,专为智能体设计。已登OpenRouter榜首,获社区广泛好评。(239字)
899 22
|
Java 数据库连接 开发者
Mybatis Plus公共字段自动填充(MyMetaObjectHandler)
Mybatis Plus公共字段自动填充(MyMetaObjectHandler)
1398 0
|
8月前
|
自然语言处理 API 内存技术
Qwen3-LiveTranslate-Flash:视、听、说全模态同传大模型
通义千问Qwen3-LiveTranslate-Flash推出实时多模态同声传译,支持18种语言及多种方言,融合视觉信息增强理解,实现3秒超低延迟、高精度语音翻译,适用于复杂环境下的跨语言交流。
998 1
Qwen3-LiveTranslate-Flash:视、听、说全模态同传大模型
|
自然语言处理 监控 数据库
阿香婆ashampoo UnInstaller 14下载,彻底删除残留垃圾流氓软件
阿香婆卸载是一款功能强大的卸载工具,能自动检测并彻底删除软件及其残留文件。它支持深度清理注册表、浏览器插件及Windows应用,提供系统快照、批量卸载、磁盘整理等功能,操作简便,有效释放磁盘空间,提升电脑运行效率。
609 4
|
7月前
|
存储 人工智能 数据可视化
阿里云X米兰设计周:用AI创造,助力每一个创作者的想象力落地
阿里云作为第十届米兰设计周中国高校设计展AI技术首席合作伙伴,携手“云工开物”与PAI ArtLab平台,为师生提供专属算力、AIGC工具及学习资源,支持AI创作与模型训练,助力青年学子释放创意潜能,推动AI与设计深度融合。
|
存储 数据可视化 BI
Python可视化应用——学生成绩分布柱状图展示
本程序使用Python读取Excel中的学生成绩数据,统计各分数段人数,并通过Matplotlib库绘制柱状图展示成绩分布。同时计算最高分、最低分及平均分,实现成绩可视化分析。
893 0
|
人工智能 监控 中间件
深入解析|Cursor编程实践经验分享
本文是近两个月的实践总结,结合在实际工作中的实践聊一聊Cursor的表现。记录在该过程中遇到的问题以及一些解法。问题概览(for 服务端): 不如我写的快?写的不符合预期? Cursor能完成哪些需求?这个需求可以用Cursor,那个需求不能用Cursor? 历史代码分析浅显,不够深入理解? 技术方案设计做的不够好,细节缺失,生成代码的可用性不够满意?
2209 11
深入解析|Cursor编程实践经验分享
|
机器学习/深度学习 存储 传感器
DeepMind发布Matryoshka(套娃)量化:利用嵌套表示实现多精度LLM的低比特深度学习
本文介绍 Google DeepMind 提出的 Matryoshka 量化技术(MatQuant),该技术通过训练单个大型语言模型(LLM)实现多精度部署,革新了深度学习
596 4
|
传感器 监控 供应链
IoT 和 IIoT 有什么区别
IoT(物联网)是指通过互联网连接各种日常设备,实现数据交换和远程控制的技术。而IIoT(工业物联网)则是专为工业领域设计的IoT,强调在制造业、能源等行业的应用,注重提高生产效率、优化流程和增强安全性。两者主要区别在于应用场景和目标不同。
1228 1