最大公约数&最小公倍数

最大公约数(GCD)是数学中的一个重要概念,可以通过欧几里得算法来计算。当给定两个数a和b(a>b),如果b能整除a,则b是它们的最大公约数;否则,通过a=b×q+r,将a对b取模,继续对b和余数r进行相同操作,直到余数为0,最终的b即为最大公约数。这种方法的时间复杂度为O(logN)。同时,两个数的乘积等于它们的最大公约数和最小公倍数的乘积。
摘要由CSDN通过智能技术生成

最大公约数

最大公约数 ( G r e a t e s t C o m m o n D i v i s o r ) (Greatest Common Divisor) (GreatestCommonDivisor),常缩写为 G C D GCD GCD。一组数的公约数,是指同时同时整除这组数中每一个数的数。最大公约数,是指所有公约数中最大的数。

那么如何求最大公约数呢?我们先考虑两个数的情况。

欧几里得算法

现在我们一张两个数,那么要如何求它们的最大公约数呢?我们不妨设 a > b a>b a>b

  1. b ∣ a b\mid a ba时,那么 b b b就是两者的最大公约数

  2. b ∤ a b \nmid a ba,即 a = b × q + r a=b\times q+r a=b×q+r,其中 r < b r<b r<b时,我们可以证明得到 g c d ( a , b ) = g c d ( b , a   m o d   b ) gcd(a,b) = gcd(b,a \: mod\: b) gcd(a,b)=gcd(b,amodb)

    a = b × k + c a=b\times k+c a=b×k+c,显然有 c = a   m o d   b c=a\:mod\:b c=amodb。设, d   ∣   a , d   ∣   b d\:|\:a,d\:|\:b da,db,则有 c   ∣   d c\:|\:d cd,因为 c = a − b × k , c=a-b\times k, c=ab×k, 所以 d   ∣ ( a − b × k ) d\:|(a-b\times k) d(ab×k),即 d   ∣ ( a   m o d   b ) d\:|(a\:mod\:b) d(amodb)

    既然 d d d是它们两个的公约数,所以有 g c d ( a , b ) = g c d ( b , a   m o d   b ) gcd(a,b) = gcd(b,a \: mod\: b) gcd(a,b)=gcd(b,amodb)。于是我们也就得到了关于两个数的最大公约数的一个递归求法。时间复杂度为 O ( l o g N ) O(logN) O(logN)

    inline int gcd(int a, int b){
    	return b ? gcd(b,a%b) : a;
    }
    

    这个函数也揭示了一个概念,即任何非零整数和零的最大公约数为它本身

    g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1时,我们称之为互质。

最小公倍数

最小公倍数(Least Common Multiple),常缩写为 L C M LCM LCM。两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

我们都知道 g c d ( a , b ) × l c m ( a , b ) = a × b gcd(a,b)\times lcm(a,b)=a\times b gcd(a,b)×lcm(a,b)=a×b。所以我们要求两个数的最小公倍数,先求出最大公约数即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星*湖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值