最大公约数、最小公倍数算法实现

最大公约数

将数a,b的最大公约数记为gcd(a, b)

虽然依次试除也能得到最大公约数,但是还有更简单、高效、优美的算法——辗转相除法

辗转相除法的原理是基于以下恒等式:gcd(a, b) = gcd(b, a mod b),以及边界条件gcd(a, 0) = a

代码实现如下

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a%b) 

以上就是传说中的欧几里得算法

最小公倍数

将数a,b的最小公倍数记为lcm(a, b)

则gcd(a, b) * lcm(a, b) = a*b,

lcm(a, b) = a*b/gcd(a, b)

证明过程如下

设,

a = p_{1}^{e_1}} p_{2}^{e_2}}... p_{r}^{e_r}}

b = p_{1}^{f_1}} p_{2}^{f_2}}... p_{r}^{f_r}}

则,

gcd(a, b) = p_{1}^{min\{e_1, f_1\}}} p_{2}^{min\{e_2 f_2\}}}... p_{r}^{min\{e_r, f_r\}}}

lcm(a, b) = p_{1}^{max\{e_1, f_1\}}} p_{2}^{max\{e_2 f_2\}}}... p_{r}^{max\{e_r, f_r\}}}

显然a*b = gcd(a, b) * lcm(a, b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

零幺_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值