Написание программы, определяющей простое число

Я пытаюсь написать программу, которая просит пользователя ввести число, затем мне нужно создать метод под названием isPrime, чтобы создать расчет и распечатать результат в main. Я уверен, что мне не хватает чего-то небольшого, но я не могу получить точный результат.

public static void main(String[] args) {
    System.out.print("Enter number: ");
    int num = s.nextInt();

    if (isPrime(num) == true) {
        System.out.println("Number is prime");
    } else if (isPrime(num) == false) {
        System.out.println("Number is not prime");
    }    
}  

public static boolean isPrime(int num){
    for(int i = 2; i <= num/2; i++) {
        if (num%i != 0) {
            return true;
        }
    }
    return false;
}

Посмотрите на свой if (num% i! = 0). Для num = 15 первая итерация даст истину, хотя это не простое число. Думаю об этом.

FNTE 04.11.2018 05:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
55
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны изменить условие "if (num% i! = 0)" на if (num% i == 0)

См. Следующий код:

public class Prime {

public static void main(String[] args) {

    int num = 29;
    boolean flag = false;
    for(int i = 2; i <= num/2; ++i)
    {
        // condition for nonprime number
        if (num % i == 0)
        {
            flag = true;
            break;
        }
    }

    if (!flag)
        System.out.println(num + " is a prime number.");
    else
        System.out.println(num + " is not a prime number.");
}
}

Используйте if и else (не проверяйте логическое условие повторно в первом случае). И не тестируйте == true в if. Этот

if (isPrime(num) == true)
{
    System.out.println("Number is prime");
}
else if (isPrime(num) == false)
{
    System.out.println("Number is not prime");
}

Просто должно быть

if (isPrime(num)) {
    System.out.println("Number is prime");
} else {
    System.out.pritnln("Number is not prime");
}

или даже что-то вроде

System.out.print("Number is ");
if (!isPrime(num)) {
    System.out.print("not ");
}
System.out.println("prime");

Если вы хотите поставить фигурные скобки на отдельные линии, продолжайте. Что касается вашего метода isPrime; у вас есть обратные условия возврата (и тест тоже). Также мы можем его немного оптимизировать. Разверните первый четный тест, потому что тогда мы сможем пропустить все остальные элементы. Также нам нужно только проверить квадратный корень входного числа. Нравиться,

public static boolean isPrime(int num) {
    if (num == 2) {
        return true; // two is prime.
    }
    if (num < 1 || num % 2 == 0) {
        return false; // all other even numbers are not prime.
    }
    for(int i = 3; i <= Math.sqrt(num); i += 2) {
        if (num % i == 0) {
            return false;
        }
     }
     return true;
}

Вам также необходимо проверить числа меньше единицы. Любое целое число, равное нулю или меньше, не является простым числом.

flakes 04.11.2018 05:15

@flakes Достаточно честно.

Elliott Frisch 04.11.2018 05:18
Ответ принят как подходящий

Метод isPrime (int num) может потребоваться проверить, если num % i == 0, а не num % i != 0, потому что многие непростые числа пройдут условие и вернут истину.

Например, если вызывается isPrime(9), условное выражение проверит, является ли 9% 2! = 0, что истинно, и метод скажет, что 9 простое число, когда это не так.

В результате вы можете попробовать изменить метод на что-то вроде этого:

public static boolean isPrime(int num)
{
    for(int i = 2; i <= num/2; i++)
    {
        if (num%i==0)
        {
         return false;
        }

    }
    return true;
}

Другие вопросы по теме