2015-12-01 6 views
-2

Вот моя программа, внутри for loop Math.sqrt(n) - Я думаю, что здесь есть ошибка.Определение того, является ли число 4 простым или нет?

import java.util.Scanner; 

public class PrimeNoCheck { 

    public static void main(String[] args) { 
     Scanner s = new Scanner(System.in); 

     System.out.print("Enter a number : "); 

     int n = s.nextInt(); 

     if (isPrime(n)) { 
      System.out.println(n + " is a prime number"); 
     } else { 
      System.out.println(n + " is not a prime number"); 
     } 

    } 

    public static boolean isPrime(int n) { 
     if (n <= 1) { 
      return false; 
     } 

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

     return true; 
    } 
} 
+7

4 не является простым, проблема решена. :) – Thomas

+0

Вы должны просто выполнить жесткую проверку для 'n% 2 == 0' перед вашим циклом. – gonzo

+3

Когда вы задавали свой вопрос, рядом с текстовой областью была большая оранжевая коробка ** «Как форматировать **» с полезной информацией. Была также вся панель инструментов форматирования. И кнопка ** [?] ** дает возможность форматирования. * И * область предварительного просмотра, расположенная между текстовой областью и кнопкой «Опубликовать свой вопрос» (чтобы вам пришлось просканировать ее, чтобы найти кнопку), показывающую, как будет выглядеть ваше сообщение при публикации. Четкость вашего сообщения и демонстрация того, что вы нашли время для этого, улучшают ваши шансы получить хорошие ответы. –

ответ

3

алгоритм: Чтобы проверить, если п простое число, вы должны попытаться разделить его на все числа от 2 (1 бесполезен), в SQRT (п), включены.

Вам не нужно проверять после sqrt (n), потому что, если n можно разделить на X, больше, чем sqrt (n), его также можно разделить на Y (n/X), меньшее, чем sqrt (n) или Z, меньше Y, если Y не является простым.

Ошибка в вашем коде заключается в том, что вы останавливаете перед sqrt (n).

С вашим кодом 4, 9, 25, ... видны как простые и все простые^2 также.

просто заменить, что: < = вместо <

for (int i = 2; i <= Math.sqrt(n); i++) { 
+1

«Что» приятно, несколько. *** Почему *** еще лучше. –

+0

Не могли бы вы уточнить? - T.J Crowder Как это работает для цикла? – Ramasamy

+1

Вы можете улучшить это путем жесткой проверки, если 'n' еще до цикла, затем запустите цикл в 3 и сделайте' i + = 2' –