You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请问这段计算Greatest Common Divisor的Java函数逻辑是否正确?

该GCD函数的计算逻辑不正确,存在多处核心问题

主要错误点:

  • 循环终止逻辑完全错误:只要当前i不能同时整除a和b,函数就直接输出当前gcd并终止循环。比如输入a=9、b=15时,i=2无法整除两者,函数直接输出1,但正确的最大公约数是3,完全漏掉了后续更大的公约数候选值。
  • i的递增逻辑混乱:只有当i能整除a和b,且之后无法再整除其中一个时,才会递增i。但如果i一开始就不能整除两者,根本不会触发i的递增,直接退出循环,导致所有后续可能的公约数都没被检查。

错误场景验证

以输入a=9、b=15为例:

  1. 初始状态gcd=1,i=2
  2. 检查发现9%2≠0且15%2≠0,直接进入else分支,输出Greatest Common Divisor :1并终止程序
  3. 实际9和15的最大公约数是3,函数结果完全错误

质因数分解思路的修正版实现

如果想用质因数分解的方式实现GCD,正确逻辑应该是从i=2开始,持续尝试整除两个数,直到i超过两数的最小值:

public static void Greatest_Common_Divisor(int a, int b) {
    int gcd = 1;
    int i = 2;
    int min = Math.min(a, b);
    while (i <= min) {
        if (a % i == 0 && b % i == 0) {
            gcd *= i;
            a /= i;
            b /= i;
            min = Math.min(a, b);
        } else {
            i++;
        }
    }
    System.out.println("Greatest Common Divisor :" + gcd);
}

当然,更高效的方法是使用欧几里得算法(辗转相除法),时间复杂度更低:

public static void Greatest_Common_Divisor(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    System.out.println("Greatest Common Divisor :" + a);
}

内容的提问来源于stack exchange,提问作者Rutvik Pathak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 12:49:54