我有一个测试这个数字是否为素数的函数。
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,它应该返回什么?这是一个考试问题,测试集将是非负整数。代码质量也会被评估,那么处理负数的常用方法是什么?抛出异常?声明所有负数为prime / composite?
答案 0 :(得分:4)
素数(或素数)是大于1的自然数,不能通过乘以两个较小的自然数来形成。 复合数是一个非整数的正整数(即,它具有除1以外的因子本身)。
请注意
isPrime(1); //false
isComposite(1); //false
return false; //what should it return 1, 0, negative numbers?
这是正确的,低于2的所有数字都不是素数。而且也没有复合。
答案 1 :(得分:1)
负面投入的一些可能性:
返回复合材料。示例:Wolfram / Alpha,Pari / GP,Perl / ntheory,Python / gmpy2使用的mpz_prp。
表示域错误。这不是一个错误的解决方案。
返回isprime(-n)。我们只使用abs(n)作为输入。 PFGW会这样做,但也会打印一条消息。我认为这对于大多数用途来说是一个可疑的选择(PFGW有点特殊)。
返回不正确的结果。不要这样做。有时看到有人在没有任何检查的情况下将任何输入转换为无符号整数类型。
还需要考虑其他输入,例如浮点输入,复数,NaN,inf,字符串,64位无符号,> 64位,等等。你控制了多少,取决于语言以及默默地建立参数的意愿。
此外,正如斯捷潘所指出的,1既不是素数也不是复合物。