2014-09-28 2 views
-3

Я пытался написать код, который принял максимальное число, и дал мне все простые числа от 2 до максимального числа. Он почти работает, но у меня возникает проблема, которая печатает все простые числа, но также печатает результат умножения того же простого числа. Например, он будет печатать 2,3,4,5,7,9, которые представляют собой все простые числа от 0 до 10, но также печатает дополнительные цифры, которые составляют 2 * 2, 3 * 3 и так далее. Пожалуйста, направляйте меня в правильном направлении, чтобы закончить эту программу.Поиск простых чисел Java

public class PrimeNumbers 
{ 
    public static void main(String[] args) 
    { 
     int max = 400; 

     //Runs through all the numbers between 2 and max, checks if 
     //the number is prime and prints it 
     for(int num = 2; num < max; ++num) 
     { 
      if(isPrimeNumber(num)) 
      { 
       System.out.println(num); 
      } 
     } 
    } 

    //method to find all prime numbers 
    public static boolean isPrimeNumber(int number) 
    { 
     for(int mod = 2; mod < Math.sqrt(number); ++mod) 
     { 
      if(number % mod == 0) 
      { 
       return false; 
      } 
     } 

     return true; 
    } 
} 
+5

4 не простое, 9 не простое ... – Alboz

+0

Даже если компилятор, вероятно, рядный вызов 'Math.sqrt', я бы рекомендовал вам сделать это самостоятельно. – Dici

+0

Я знаю это, поэтому я сказал, что он печатает все простые числа плюс некоторые дополнительные числа, которые не являются первыми. – ed1234567

ответ

5

Ваше конечное условие не так, вы должны пройти весь путь до sqrt(num):

for (int mod = 2; mod <= Math.sqrt(number); ++mod) 
+0

Этот вопрос задает вопрос о том, почему печатаются «простые» числа после (2 * 2 и т. Д.), Ваш ответ не адресуется об этом –

+2

Он обращается к нему, метод OP является неправильным только для квадратных чисел, поэтому он получает ' true' для 4 и 9. – Dici

+0

Да, это определенно решает мою проблему, все еще не уверен, почему, но теперь она отлично работает – ed1234567

Смежные вопросы