在java中编写isPrime函数并使用Math.sqrt

时间:2017-10-03 02:38:25

标签: java math.sqrt

当编写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;
    }

2 个答案:

答案 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的因子。