Функция 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;
}