当编写isPrime函数以在Java中返回布尔值时,我看到很多人在其for循环中使用Math.sqrt(number)的例子。有人可以解释为什么以及这个函数在for循环中做了什么?我附上了一个例子供参考。谢谢!
public boolean isPrime(int n) {
if (n <= 1) {
return false;
}
for (int i = 2; i < Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
答案 0 :(得分:0)
你怎么知道n是否是素数?第一个策略是测试所有数字,从2到(n-1)。对于每个值i,检查n是否除以i。如果你找到这样的i,那么n就不是素数。
但你真的需要测试所有价值观吗?不,只要你达到n的平方根,你就会测试相同的“一对”值。换句话说,sqrt是为了限制要完成的测试次数,从而提高性能。
答案 1 :(得分:0)
如果数字不是素数,则可以将其考虑为两个因子f1和f2
如果f1和f2>数字的sqrt,f1 * f2将是>数字。因此,这些因素中的至少一个必须&lt; =该数字的sqrt。要查看数字是否实际为素数,我们只需要测试&lt; =到sqrt的因子。