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

不使用数组基于欧几里得算法实现三个整数的最大公约数求解

三整数最大公约数(GCD)实现优化方案

你已实现的两参数欧几里得GCD计算逻辑是完全可用的,结合三个数GCD的数学性质:

gcd(a, b, c) = gcd(a, gcd(b, c)) = gcd(gcd(a, b), c) = gcd(gcd(a, c), b)
直接复用已有的两参数方法即可实现三参数GCD计算,完全满足「不使用数组」的要求,不需要单独编写复杂的多分支判断逻辑,可大幅降低出错概率。

已验证的两参数GCD实现(原有正确代码)

public static int GetGcdByEuclidean(int a, int b)
{
    if (a == 0 && b == 0)
    {
        throw new ArgumentException(null);
    }
    else if (a == int.MinValue)
    {
        throw new ArgumentOutOfRangeException(nameof(a));
    }
    else if (b == int.MinValue)
    {
        throw new ArgumentOutOfRangeException(nameof(b));
    }
    else
    {
        int abs1 = Math.Abs(a);
        int abs2 = Math.Abs(b);
        a = abs1;
        b = abs2;

        while (a != 0 && b != 0)
        {
            if (a > b)
            {
                a %= b;
            }
            else
            {
                b %= a;
            }
        }

        return a | b;
    }
}

正确的三参数GCD实现

public static int GetGcdByEuclidean(int a, int b, int c)
{
    // 复用两参数方法,先算后两个数的GCD,再和第一个数算GCD即可
    return GetGcdByEuclidean(a, GetGcdByEuclidean(b, c));
}

原有三参数实现的问题说明

你原先单独编写的三参数实现存在以下可优化点:

  • 多分支判断逻辑冗余,覆盖场景不全,遇到边界输入(比如其中一个参数为0)时容易出现计算错误
  • 循环终止条件为三个数全不为0,只要有一个数为0就会退出循环,此时result的赋值逻辑无法适配所有边界场景
  • 重复实现了欧几里得算法的核心逻辑,没有复用已验证的正确代码,增加了维护成本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:42:02