最大公约数、最小公倍数

一、前言  

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

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

我们查阅资料很容易知道,求两个数(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的公约数的集合。

 且 任意 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 分解质因子得:

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

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

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

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

〖雪月清〗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值