素数检测函数isPrime()对负数及小于2的数应返回什么?
关于素数检测函数处理负数的常见问题解答
先明确一个核心前提:数学上素数的定义是大于1的自然数,所以负数、0、1都不属于素数范畴。基于这个定义,我们来逐个解答你的问题:
1. 布尔类型的isPrime()函数针对负数应返回什么?
按照严格的数学定义,直接返回false就对了。因为负数完全不在素数的讨论范围内,不存在“负数素数”这种说法。
2. 输入数字小于2时应返回什么?
同样返回false。小于2的数包括0、1和所有负数,都不符合素数“大于1”的核心条件,所以统一返回false是最合理的。
考题场景下处理负数的常规方式
虽然测试用例都是非负整数,但代码质量评估会看你对边界情况的处理,常见的几种处理方式如下:
- 按数学定义返回false:这是最稳妥、最符合直觉的做法。既不会破坏函数的布尔返回契约,也符合数学逻辑,就算调用者不小心传入负数,结果也是正确的。
- 抛出非法参数异常:如果你的函数设计时就约定了“只接受非负整数输入”,那传入负数属于违反契约的非法操作,这时候抛出异常(比如Python的
ValueError、Java的IllegalArgumentException)是更严谨的选择。它能明确告知调用者参数不合法,避免潜在的逻辑错误。 - ❌ 绝对不要判定负数为素数:这完全违背数学定义,会被视为严重的逻辑错误,绝对会在代码质量评估里扣分。
总结一下,如果是考题场景,优先选“返回false”或者“加参数校验抛异常”,前者更兼容,后者更严谨,都能体现你对边界情况的考虑。
内容的提问来源于stack exchange,提问作者UIUXU




