对于负数,boolean isPrime() return 应该是什么?

What should a boolean isPrime() return for negative numbers?

我有一个函数可以测试这个数字是否是质数。

public static boolean isPrime(int number) {

    if (number == 2) {
        return true;
    } else if (number > 2) {
        //faster method: number is even ? false : test odd divisors
        for (int counter = 2; counter * counter >= number; counter++) {
            if (number % counter == 0) {
                return false;
            }
        }
        return true;
    } else {
        return false; //what should it return 1, 0, negative numbers?   
    }
}

如果数字小于 2,return 应该怎么办?这是一个考试问题,测试集将是非负整数。代码质量也会被评估,那么负数的常见处理方式是什么?抛出异常?声明所有负数 prime/composite?

素数(或素数)是大于1的自然数,不能由两个更小的自然数相乘得到。 合数是一个非质数的正整数(即除 1 和它本身以外的其他因数)。

注意

isPrime(1); //false
isComposite(1); //false

return false; //what should it return 1, 0, negative numbers? 这是正确的所有小于 2 的数字都不是素数。而且也不是复合材料。

负输入的一些可能性:

  • Return复合。示例:Wolfram/Alpha、Pari/GP、Perl/ntheory、mpz_prp 被 Python/gmpy2 使用。

  • 表示域错误。这不是一个错误的解决方案。

  • Return 是质数 (-n)。我们只使用 abs(n) 作为输入。 PFGW 会执行此操作,但也会打印有关它的消息。我认为对于大多数目的来说这是一个可疑的选择(PFGW 是一种特殊情况)。

  • Return 不正确的结果。不要这样做。有时会看到有人在没有任何检查的情况下将任何输入转换为无符号整数类型。

还有其他输入需要考虑,例如如何处理浮点输入、复数、NaN、inf、字符串、64 位无符号、> 64 位等。您控制多少取决于语言以及默默地提出论点的意愿。

此外,正如 Stepan 指出的那样,1 既不是质数也不是合数。