辗转相除法求解最大公约数和最小公倍数

题外话

今天在某C语言视频上看到一条很有意思的评论,说“写程序哪是在敲代码,是在搞数学啊!

这话也确实有点道理,毕竟一个程序里面包含了很多很多的数学知识,包括学习算法、数据结构时,都需要数学理论的支撑,但是我们得清楚一点:对于程序员来说,学好数学的确很重要,但是探究数学原理、证明为什么不是我们该干的事,我们只需要运用原理,实现我们的程序就行了

所以说,搞清楚重点,我们应该做的是什么,这样才能学好。

辗转相除法求最大公约数

要求最大公约数有很多方法:穷举法、辗转相除法、递归.......

今天主要讲一下辗转相除法。

就像上文说的,关于辗转相除法,我们不需要证明为什么可以这样做,只需要借助这个数学理论就行了。

比如两个数:30 18,

先是30%18=12,将此时的除数(18)变成被除数,将此时的余数(12)变成被除数。

继续执行上述过程,18%12,......直到余数变为0 结束。

来看代码:

 这边进入while循环时,条件设为x%y,当余数为0时,就跳出循环,此时的除数 y 就是最大公约数。

有人担心,输入的值如果前面大,后面小怎么办。这完全不用烦恼,因为这个代码运行的时候就把两个数(前小后大)交换过来了。

 18 % 30 余0 膜 18,将此时的除数(30)变成被除数,将此时的余数(18)变成被除数。

这不就调过来了吗?

最小公倍数

最大公倍数如何计算呢?实际上它与最大公约数是有关系的,我们不妨举例来看一下:

 可以看出,除数与被除数相乘 再除最大公约数,就得到了最小公倍数。

以上面的代码为基础,来看求完最大公约数后怎么求最小公倍数:

 

 这边要注意的是,在进入循环之前先设另外两个变量m,n去拿x,y的初始值,方便后面求最小公倍数用到。

关于辗转相除法的分享就到这里了,祝大家万事顺遂!!

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值