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

如何编写C#类库方法实现输入数字的质因数提取返回功能?

问题分析

你现有代码的问题如下:

  • 参数设计冗余:不需要将b作为入参,该变量是分解过程中遍历用的除数,完全可以在方法内部声明,对外暴露无意义还会增加调用成本
  • 循环终止条件错误:外层循环的终止条件为a>0,实际上当a被除到1时就已经完成质因数分解,当前写法会进入无限循环
  • 死循环问题:内部while循环匹配到整除条件后,没有对a做除以b的操作,只要匹配到第一个因数就会一直卡在这里循环
  • 结果拼接逻辑错误:每次匹配到因数时直接对x赋值,会覆盖之前的所有结果;同时没有使用C#插值字符串的正确语法(需要在引号前加$),也没有添加多因数的分隔符,和你要求的返回所有质因数的需求完全不符
  • 补充说明:你给出的示例「输入4返回2和4」是笔误,4的质因数分解是2×2,正确输出应为2、2。
修正后代码

如果你需要返回质因数列表,推荐直接返回List<int>类型,方便调用方二次处理;如果需要直接拿到格式化字符串,可以新增重载方法:

namespace PrimeFactorsLib
{
    public class PrimeFactorsClass
    {
        // 返回质因数列表的核心方法
        public List<int> PrimeFactors(int input)
        {
            List<int> factors = new List<int>();
            // 处理小于2的非法输入
            if (input < 2)
                return factors;
            // 从最小的质数2开始遍历除
            for (int divisor = 2; divisor <= input; divisor++)
            {
                // 能整除就一直除,把所有相同的质因数都存入结果
                while (input % divisor == 0)
                {
                    factors.Add(divisor);
                    input /= divisor;
                }
            }
            return factors;
        }

        // 直接返回格式化字符串的重载方法
        public string GetPrimeFactorsString(int input)
        {
            var factors = PrimeFactors(input);
            return string.Join("、", factors);
        }
    }
}
控制台调用示例
using PrimeFactorsLib;

class Program
{
    static void Main(string[] args)
    {
        PrimeFactorsClass calculator = new PrimeFactorsClass();
        Console.WriteLine(calculator.GetPrimeFactorsString(4)); // 输出 2、2
        Console.WriteLine(calculator.GetPrimeFactorsString(50)); // 输出 2、5、5
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:27:04