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

求1-20最小正公倍数的C#代码优化及输出控制咨询

解决方案

原代码问题分析

  • 效率极低:原代码采用暴力枚举逐个递增数字,每次不满足整除条件就重置检查起点,对于1-20的最小公倍数,需要循环数十亿次,耗时极长。
  • 多余输出:循环内的Console.WriteLine(Number)会输出所有中间数值,不符合仅输出最终结果的需求。

优化思路

求1到20所有数的最小正整数,本质是计算这20个数的最小公倍数(LCM)。利用数学性质:

  • 两个数的最小公倍数 = 两数乘积 / 两数的最大公约数(GCD)
  • 多个数的最小公倍数可通过迭代计算:先算前两个数的LCM,再用结果和第三个数算LCM,以此类推直到第20个数。
  • 用辗转相除法高效计算最大公约数,避免暴力枚举的低效问题。

优化后的C#代码

class Program
{
    static void Main(string[] args)
    {
        long result = 1;
        for (int i = 2; i <= 20; i++)
        {
            result = CalculateLCM(result, i);
        }
        Console.WriteLine(result);
        Console.Read();
    }

    // 计算最大公约数(辗转相除法)
    private static long CalculateGCD(long a, long b)
    {
        while (b != 0)
        {
            long temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    // 计算最小公倍数
    private static long CalculateLCM(long a, long b)
    {
        return (a / CalculateGCD(a, b)) * b; // 先除法避免溢出
    }
}

代码说明

  • CalculateGCD方法用辗转相除法快速计算两个数的最大公约数,时间复杂度极低。
  • CalculateLCM方法基于最大公约数计算最小公倍数,先做除法再乘法避免数值溢出(用long类型保证足够的容量)。
  • 迭代计算1到20的累积最小公倍数,最后仅输出最终结果,无中间冗余输出。
  • 运行效率大幅提升,瞬间即可得到结果232792560。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:35:22