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

C#素数打印程序输入≥3时中途冻结无输出问题求助

打印前N个素数程序输入≥3时冻结的问题修复

问题现象

输入N=2时程序正常输出2、3;输入N=3时打印3后程序冻结,无输出也不报错;仅输入N<3时运行正常。

问题根源

  1. 未重置素数标记:isPrimeFlag变量初始化后,每次检查新数字前没有重置状态。当处理数字4时,因4能被2整除,isPrimeFlag被设为0;后续处理数字5时,该标记仍为0,导致5被误判为非素数,count始终停在2,while (count <= n)条件永久成立,程序进入死循环。
  2. 素数检查效率低下:原代码循环检查从2到number-1的所有数,无提前终止逻辑,浪费计算资源。

修复后的代码

int n;
Console.WriteLine("input: ");
n = Convert.ToInt32(Console.ReadLine());

int count = 1;
int number = 2;
while (count <= n)
{
    bool isPrime = true; // 每次检查新数字时重置素数标记
    // 优化:仅检查到number的平方根,且找到因子后立即退出循环
    for (int i = 2; i <= Math.Sqrt(number); i++)
    {
        if (number % i == 0)
        {
            isPrime = false;
            break;
        }
    }

    if (isPrime)
    {
        Console.WriteLine("number: " + number);
        Console.WriteLine("count: " + count);
        count++;
    }

    number++;
}

Console.WriteLine("n: " + n);
Console.WriteLine("count: " + count);

关键修复点说明

  • 重置素数标记:将素数标记改为bool类型(语义更清晰),每次检查新数字时初始化为true,确保每个数字的素数判断独立。
  • 优化素数检查逻辑:
    • 循环条件改为i <= Math.Sqrt(number),减少循环次数——若number存在大于其平方根的因子,必然对应一个小于平方根的因子。
    • 找到能整除的因子后立即break退出循环,避免无效计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:18:27