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

质数判断代码问题:负数转正失效及0、1非质数判定需求

C#质数判断:负数转正数与0/1逻辑修复

问题分析

  • 负数转正数的溢出问题:你写的n = -n在输入为int.MinValue(即-2147483648)时会溢出,因为-int.MinValue等于2147483648,超出了int类型的最大值(2147483647),导致n仍为负数,后续判断逻辑失效。
  • 0/1的逻辑缺失:根据质数定义,质数是大于1的自然数,0和1都不属于质数范畴,需要在循环判断前直接处理这类情况。

修正后的代码

int n = int.Parse(Console.ReadLine());
bool isPrime = true;

// 安全处理负数:避免int.MinValue溢出问题
if (n == int.MinValue)
{
    isPrime = false;
}
else
{
    n = Math.Abs(n);
}

// 直接处理0、1的非质数情况
if (n <= 1)
{
    isPrime = false;
}
else
{
    // 优化循环范围:仅需遍历到n的平方根,提升效率
    for (int i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            isPrime = false;
            break;
        }
    }
}

Console.WriteLine(isPrime ? "Prime" : "Not prime");

关键改动说明

  • 负数处理:用Math.Abs(n)安全获取绝对值,同时单独判断int.MinValue——它的绝对值无法用int存储,且2147483648是偶数,必然不是质数,直接标记为非质数。
  • 0/1判断:在循环前检查n <= 1,直接设置为非质数,完全符合质数的定义规则。
  • 循环优化:将循环条件改为i * i <= n,大幅减少循环次数(比如判断100时,只需循环到10而非99),提升判断效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 17:40:45