Функция Java - isPrime

Это мой 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. Что не так с функцией?

Ответ 1

Ваше условие должно быть я * я <= num

private static boolean isPrime(int num) {
        if (num < 2) return false;
        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;
}

Вы не приняли номер 9 в своем рассмотрении, поэтому 9 и 9 приведут к ошибке. Но вам нужно проверить 9.

Ответ 2

Вот несколько советов:

  • Основная ошибка заключается в том, что вы никогда не проверяете делимость на sqrt(num) из-за ошибки в цикле.

  • Другая ошибка заключается в том, что вы не считаете, что 2 является простым (это оно).

Ответ 3

Измените свой код следующим образом (условие проверки):

 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;
  }  

Ответ 4

(Поздний) Сиднейд:

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;
}

Ответ 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;
    }

Ответ 6

Java 8: (Пример с lambda-выражением и потоками)

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

Ответ 7

условие цикла с i * i < num должно быть i * i <= num

Ответ 8

цикл никогда не выполняется, поэтому он возвращает true true

Ответ 9

Цикл не запускается. Он заканчивается в самом первом значении i, потому что 3 x 3 = 9 он не удовлетворяет условию я * я < п

Ответ 10

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

i * i равно 9 и 9 не менее 9, поэтому цикл не запускается.

Ответ 11

public static boolean isPrime(int n) {

    boolean isPrime = true;

    int endValue = 10;
    if (n < 10) {
        endValue = n - 1;
    }

    for (int i = 2; i < endValue; i++) {
        if (n % i == 0) {
            isPrime = false;
            break;
        }
    }

    return isPrime;
}

Ответ 12

Это может быть достигнуто без какого-либо цикла.

public boolean isPrime(int n) {
    if(n == 2 || n == 3 || n == 5 || n == 7) return true;

    if((n < 2)  || (n & 1) == 0 || (n % 3) == 0 || (n % 5) == 0 || (n % 7) == 0) return false;

    return true;
}

Ответ 13

вы можете просто использовать оператор 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;
}

Ответ 14

Попробуйте следующее:

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