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
相关产品推荐
相关产品推荐

