码迷,mamicode.com
首页 > 其他好文 > 详细

最大公约数和最小公倍数

时间:2019-09-25 00:57:40      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:long   约数   快速   欧几里得   溢出   欧几里得算法   str   code   gcd   

最大公约数

通常来说,我们使用『辗转相除法』能够快速高效地求出两个数的「最大公约数」,其实就是欧几里得算法,公式如下:

gcd(x, y) = gcd(y, x % y)
gcd(x, 0) = x

代码如下,很简单:

public long gcd(long x, long y) {
    if (y == 0) {
        return x;
    }
    return gcd(y, x % y);
}

最小公倍数

定理:a、b 两个数的最小公倍数乘以它们的最大公约数等于 a 和 b 本身的乘积

由上述定理可知,在最大公约数的基础上我们可以轻易得到「最小公倍数」;对于 a、b 两个数,假设它们的最大公约数为 c,那么它们的最小公倍数为a*b/c,但 a*b 有时候会出现溢出的情况,因此正确的方式应该是先除后乘a/c*b

Java 代码实现:

// 最小公倍数
public long lcm(long x, long y) {
    return x / gcd(x, y) * y;
}

public long gcd(long x, long y) {
    if (y == 0) {
        return x;
    }
    return gcd(y, x % y);
}

最大公约数和最小公倍数

标签:long   约数   快速   欧几里得   溢出   欧几里得算法   str   code   gcd   

原文地址:https://www.cnblogs.com/Bylight/p/11581956.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!