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

C#使用数组元素试除判断素数的代码问题排查求助

素数判断代码问题排查
  • 整除判断逻辑错误:C#中两个int类型做除法运算默认返回整数(向下取整),所以result % 1的结果永远是0,你写的循环判断条件完全无效。要判断两个数能否整除,应该使用取余运算符%,判断number % 除数 == 0是否成立即可。
  • 除数数组包含非法值1:素数的定义是「大于1的自然数,除了1和它本身之外没有其他正因数」,所以判断素数时不需要用1做除数,任何数除以1都能整除,会导致你的循环第一次执行就直接退出,根本不会走后续2、3等有效除数的判断。
  • 循环终止逻辑缺失:你没有判断是否已经遍历完所有除数,一旦输入的数不能被数组里的所有元素整除,会出现数组下标越界的报错。
  • 除数覆盖范围有限:你当前写死的除数数组最多到11,只能判断小于13²=169的数是否为素数,大于169的数用这个数组无法得到准确结果。
适配原有写法的修正代码

保留你原有的固定除数数组逻辑,仅修改错误部分:

Console.Write("Enter a number: ");
int number = Convert.ToInt32(Console.ReadLine());
bool isPrime = true;
int[] div = { 2, 3, 5, 7, 11 }; // 移除了无效除数1

if (number < 2)
{
    isPrime = false;
}
else
{
    foreach (int d in div)
    {
        // 除数大于等于数字本身时无需继续判断
        if (d >= number) break;
        if (number % d == 0)
        {
            isPrime = false;
            break;
        }
    }
}

if (isPrime)
{
    Console.WriteLine("The number seems to be prime for now");
}
else
{
    Console.WriteLine("The number is not prime");
}
Console.ReadLine();
通用素数判断参考代码

不需要提前写死除数数组,适配任意正整数的判断:

Console.Write("Enter a number: ");
int number = Convert.ToInt32(Console.ReadLine());
bool isPrime = true;

// 小于2的数都不是素数
if (number < 2)
{
    isPrime = false;
}
// 2是唯一的偶素数
else if (number == 2)
{
    isPrime = true;
}
// 除了2之外的偶数都不是素数
else if (number % 2 == 0)
{
    isPrime = false;
}
else
{
    // 只需要遍历到number的平方根即可,步长为2跳过偶数减少运算量
    for (int i = 3; i <= Math.Sqrt(number); i += 2)
    {
        if (number % i == 0)
        {
            isPrime = false;
            break;
        }
    }
}

if (isPrime)
{
    Console.WriteLine($"{number} is prime");
}
else
{
    Console.WriteLine($"{number} is not prime");
}
Console.ReadLine();

内容的提问来源于stack exchange,提问作者i said no

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:06:04