我的isPrime方法有什么问题?

usa*_*800 11 java methods primes function

这是我的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;
}
Run Code Online (Sandbox Code Playgroud)

我把isPrime(9)它放回去了true.这个方法有什么问题?

Tar*_*lah 35

你的情况应该是i*i <= 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;
}
Run Code Online (Sandbox Code Playgroud)

您没有在考虑中使用数字9,因此9 <9将导致错误.但你需要检查9.

  • 1不是素数,应加上`|| num == 1`到函数的第二行 (3认同)

小智 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;
}
Run Code Online (Sandbox Code Playgroud)

  • 1不是素数,调整样本. (2认同)