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

C#质数检查器开发遇问题,求代码逻辑修正及详细解释

C#质数检查器代码修正及逻辑解释

先说明原代码的几个核心问题:

  • Main方法调用IsNumberPrime()时未传递输入的number参数,与方法定义的参数要求冲突,会触发编译错误。
  • IsNumberPrime声明返回int类型,但方法内没有任何return语句,编译不通过。
  • for循环条件错误:number % a == 0会导致质数场景下循环直接跳过,非质数场景下仅执行一次就终止,完全无法正确遍历检查因子。
  • 质数场景无输出逻辑:如果输入是质数,原循环根本不会执行,控制台不会输出任何结果。

以下是修正后的完整代码:

internal class Program
{
    static void Main(string[] args)
    {
        int number = Convert.ToInt32(Console.ReadLine());
        IsNumberPrime(number);

        Console.ReadKey();
    }

    static void IsNumberPrime(int number)
    {
        if (number <= 0)
        {
            Console.WriteLine($"{number} is not Prime");
            return;
        }
        if (number == 1)
        {
            Console.WriteLine($"{number} is not Prime");
            return;
        }

        bool isPrime = true;
        for (int a = 2; a <= Math.Sqrt(number); a++)
        {
            if (number % a == 0)
            {
                isPrime = false;
                break;
            }
        }

        Console.WriteLine(isPrime ? $"{number} is Prime" : $"{number} is not Prime");
    }
}

各部分逻辑解释:

  1. Main方法:

    • 读取用户输入的字符串并转换为int类型,存储到number变量。
    • 调用IsNumberPrime方法并传入number,触发质数检查逻辑。
  2. IsNumberPrime方法:

    • 边界值判断:先处理<=0和等于1的情况,这类数明确不是质数,直接输出结果后用return终止方法,避免执行后续冗余逻辑。
    • 质数标记初始化:用isPrime变量默认设为true,先假设当前数是质数。
    • 循环检查因子:
      • 循环从2开始,到Math.Sqrt(number)结束,这是效率优化点——如果number存在大于其平方根的因子,必然对应一个小于平方根的因子,无需检查到number本身。
      • 只要找到能整除number的a,就把isPrime设为false,然后break跳出循环,无需继续检查剩余数值。
    • 结果输出:根据isPrime的最终状态,输出对应的判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:16:08