我的isPrime方法有什么问题?

时间:2013-12-27 09:46:42

标签: java function methods primes

这是我的isPrime方法:

private static boolean isPrime(int num) {
    if (num % 2 == 0) return false;
    for (int i = 3; i * i < num; i += 2)
        if (num % i == 0) return false;
    return true;
}

我放isPrime(9)并返回true。该方法有什么问题?

13 个答案:

答案 0 :(得分:35)

您的情况应该是i * i&lt; = num

private static boolean isPrime(int num) 
{
        if (num == 2) 
            return true;
        if (num < 2 || num % 2 == 0) 
            return false;
        for (int i = 3; i * i <= num; i += 2)
            if (num % i == 0) 
                return false;
        return true;
}

你没有在考虑中使用9号,因此9&lt; 9将导致错误。但你需要检查9。

答案 1 :(得分:5)

我的样本:

public boolean isPrime(int x) {
    if (x==1) {
        return true;
    } else {
        for(int i=2;i<=Math.sqrt(x);i++) {
            if (x%i==0) return false;          
    }
    return true;
}

答案 2 :(得分:3)

Java 8 :(使用lambda表达式和流的示例)

public static boolean isPrimeFunctionalStyle(int number) {
    return number > 1 && 
            IntStream.rangeClosed(2, (int) Math.sqrt(number))
                .noneMatch(i -> number % i == 0);
}

答案 3 :(得分:2)

以下是一些提示:

  1. 主要的错误是,由于循环中有一个错误的错误,您永远不会通过sqrt(num)检查可分性。

  2. 另一个错误是你不认为2是素数(它是)。

答案 4 :(得分:2)

像这样更改你的代码(检查条件):

 private static boolean isPrime(int num) {
        if (num == 2) return true;
        if (num % 2 == 0)
            return false;
        for (int i = 3; i * i <= num; i += 2)
            if (num % i == 0) return false;
        return true;
  }  

答案 5 :(得分:2)

(已晚)Sidenode:

private static boolean isPrime(int num) {
    if (num % 2 == 0) return false;
    for (int i = 3; i * i < num; i += 2)
        if (num % i == 0) return false;
    return true;
}

此代码遗失2; 2是一个主要数字。由2除外的所有内容都不是,2除外 - 所以,请使用:

private static boolean isPrime(int num) {
    if (num == 2) return true;
    if (num % 2 == 0) return false;
    for (int i = 3; i * i < num; i += 2)
        if (num % i == 0) return false;
    return true;
}

答案 6 :(得分:0)

i * i < num的循环条件应为i * i <= num

答案 7 :(得分:0)

循环永远不会被执行,所以它直接返回

答案 8 :(得分:0)

循环不运行。它在i的第一个值中终止,因为3 x 3 = 9 它不符合条件i * i&lt; Ñ

答案 9 :(得分:0)

 for (int i = 3; i * i < num; i += 2)
        if (num % i == 0) return false;

i * i为9,而9不小于9,因此循环不会运行。

答案 10 :(得分:0)

你可以简单地使用if和else语句来检查数字是否为素数。有一种模式,一旦数量达到一定限度,所有数字都是2或3的倍数。

public static boolean isPrime2 (int n)
{
    if (n == 1) {
        return false;
    } else if (n == 2 || n==3) {
        return true;
    } else if (n>2) {
        if(n % 2 ==0 || n % 3 == 0) {
            return false;
        }
    }
    return true;
}

答案 11 :(得分:0)

public static boolean isPrime (int number) {
    if(number < 2) {
        return false;
    }
    int check = (int) Math.sqrt(number);


    for(int i = 2; i <= check; i++) {
        if(number % i == 0) {
            return false;
        }
    }
    return true;
}

答案 12 :(得分:0)

psql