最大公约数、最小公倍数

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

一、前言  

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


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  即证


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


相关文章
|
6月前
|
JavaScript 前端开发 Java
最大公约数
【6月更文挑战第23天】
78 4
|
6月前
|
移动开发 算法
最大公约数和最小公倍数
【6月更文挑战第8天】最大公约数和最小公倍数。
69 9
|
6月前
每日一数——最大公约数与最小公倍数
每日一数——最大公约数与最小公倍数
求最小公倍数
求最小公倍数
138 0
|
7月前
|
算法
详解最大公约数和最小公倍数
详解最大公约数和最小公倍数
wustojc5002最大公约数
wustojc5002最大公约数
52 0
求最大公约数
求最大公约数
78 0
|
人工智能 BI
求最大公约数和最小公倍数
求最大公约数和最小公倍数
95 0
求最小公倍数!
求最小公倍数!
103 0