📜  GCD - Java (1)

📅  最后修改于: 2023-12-03 15:15:13.781000             🧑  作者: Mango

GCD - Java

GCD (Greatest Common Divisor) 是指两个或多个整数的最大公约数,是数学中的一个重要概念。

在 Java 中,可以使用以下几种方式来计算两个数的 GCD。

方法 1: 暴力枚举法

最简单的方式是使用暴力枚举法计算两个数的 GCD。该方法的时间复杂度为 O(min(a,b))。

public static int gcd(int a, int b) {
    int gcd = 1;
    for (int i = 1; i <= a && i <= b; i++) {
        if (a % i == 0 && b % i == 0) {
            gcd = i;
        }
    }
    return gcd;
}
方法 2: 辗转相减法

辗转相减法是一种更为高效的算法,时间复杂度为 O(max(a,b))。

public static int gcd(int a, int b) {
    if (a == b) {
        return a;
    }
    if (a > b) {
        return gcd(a - b, b);
    }
    return gcd(a, b - a);
}
方法 3: 更相减损术与移位结合法

更相减损术与移位结合法的时间复杂度为 O(log(max(a,b))),是一种更加高效的算法。

public static int gcd(int a, int b) {
    if (a == b) {
        return a;
    }
    if (a == 0) {
        return b;
    }
    if (b == 0) {
        return a;
    }
    if ((a & 1) == 0 && (b & 1) == 0) {
        return gcd(a >> 1, b >> 1) << 1;
    } else if ((a & 1) == 0 && (b & 1) != 0) {
        return gcd(a >> 1, b);
    } else if ((a & 1) != 0 && (b & 1) == 0) {
        return gcd(a, b >> 1);
    } else {
        int big = a > b ? a : b;
        int small = a < b ? a : b;
        return gcd(big - small, small);
    }
}
总结

以上就是三种常见的求 GCD 的方式。在实际应用中,最好选用更加高效的算法来计算 GCD,以实现更快的运算速度。