zoukankan      html  css  js  c++  java
  • 最大公约数和最小公倍数

    最大公约数

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

    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);
    }
    
  • 相关阅读:
    hdoj_1556Color the ball
    wchar_t与char转换(总结)
    算法艺术——网络最大流
    poj_3268Silver Cow Party
    poj_2352Stars
    BellmanFord模板
    saas模式
    什么是管道
    什么是CMMI
    saas模式
  • 原文地址:https://www.cnblogs.com/Bylight/p/11581956.html
Copyright © 2011-2022 走看看