最大公约数和最小公倍数

1.最大公约数

最大公约数的英文是Greatest Common Divisor,常缩写为 gcd。
我们首先先了解一下约数的概念:如果存在一个整数 k k k,使得 a = k d a=kd a=kd ,则 d d d a a a整除,记做 d ∣ a d|a da,称 a a a d d d的倍数,如果 d > 0 d>0 d>0,称 d d d a a a的约数。特别地,任何整数都整除 0 0 0

那什么是公约数?
一组数的公约数,是指同时是这组数中每一个数的约数的数。而最大公约数,则是指所有公约数里面最大的一个。

那又有了一个问题了,我们整么求出一组数的最大公约数呢?

更相减损术

可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
(⊙v⊙)嗯,什么意思

其意思为:可以折半的话,就折半(也就是用2来约分)。如果不可以折半的话,那么就比较分母和分子的大小,用大数减去小数,互相减来减去,一直到减数与差相等为止,用这个相等的数字来约分。

操作

1.任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
2.以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。

优化

在每次减好之后都对能除2的除2,若2个都能除2,同除2,gcd*2。

优点

可以用于高精度算法(好东西)。

欧几里得算法(也就是辗转相除法)

我们先考虑两个数的情况。
我们已知两个数 a a a b b b,其中 a > b a>b a>b
如果 b b b a a a的约数,那么最大公约数就是 b b b
如果不能整除,那么 a = b ∗ k + r a=b*k+r a=bk+r,其中 r < b r<b r<b
我们最后其实可以得到 g c d ( a , b ) = g c d ( b , b m o d      a ) gcd(a,b)=gcd(b,b\mod\ a) gcd(a,b)=gcd(b,bmod a)

证明 g c d ( a , b ) = g c d ( b , b m o d      a ) gcd(a,b)=gcd(b,b\mod\ a) gcd(a,b)=gcd(b,bmod a)

a = b k + c a=bk+c a=bk+c,那么有 c = a m o d      b c=a\mod\ b c=amod b。设 d ∣ a     d ∣ b d|a\ \ \ d|b da   db,则 c − a − b k c d = a d − b d k c-a-bk \frac{c}{d}=\frac{a}{d}-\frac{b}{d}k cabkdc=dadbk由右边式子可知 c d \frac{c}{d} dc为整数,即 d ∣ c d|c dc所以对于 a , b a,b a,b的公约数,它也会是 a m o d      b a\mod\ b amo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值