2015-07-11 2 views
0

У меня проблемы с моим кодом. Я пытаюсь написать метод, который выводит все простые числа от 2 до 10 000. Я все еще новичок в java, и я не был уверен, как это сделать, я знаю, что для этого я бы использовал метод двоичного поиска и циклы. Я попытался следовать примерам, которые я читал в своем учебнике и онлайн; это то, что я придумал, однако он не работает должным образом. Я не уверен, что это совершенно правильно. Любая помощь или совет о том, как это сделать или это сделать, будут оценены.Вывод простых чисел - Java

public static void prime() { 
    int i; // variable for loop 

    for(i=2; i<=10000; i++) 
    { 
     int factors =0; 
     int j = 1; 

     while(j<=i) 
     { 
      if(i%j == 0) 
      { 
       factors++; 
      } //End if 
      j++; 
     } 

     if(factors == 2) 
     { 
      System.out.println(i); 
     } //End if 
    }// End for 
} // End method prime 
+1

Что вы говорите, что оно не работает должным образом. Дайте более подробную информацию. – sstan

+0

См. Аналогичный, ответ на вопрос [здесь] [1]. [1]: http://stackoverflow.com/questions/2831192/help-with-java-program-for-prime-numbers?rq=1 – spb1994

+1

"однако он не работает должным образом" - это не самый эффективный способ, но алгоритм правильный, и результаты хороши. Почему вы думаете, что это не работает? – alfasin

ответ

1

Подумайте о том, что означает главное: число, которое делится только на 1 и на себя. Используя это определение, вы можете написать гораздо более эффективный фрагмент кода, который проверяет, равно ли делится текущее число на число, отличное от 1 и самого, то есть 2.

0

Одним из улучшений, которые вы можете сделать, является то, что если число имеет, чем больше двух факторов остановка тестирования, если это простое число, не доходя до предела второго цикла

public static void printPrimes() 
{ 
    int i; 
    boolean isPrime ; 

    for(i=2; i<=10000; i++) 
    { 
     int factors ; 
     int j ; 

     factors = 1 ; 
     isPrime = true ; 

     for(j = 2; isPrime && j <= i; j++) 
     { 
      if(i%j == 0) 
      { 
       factors++; 
      } 

      if(factors > 2) 
      { 
       isPrime = false ; 
      } 
     } 

     if(isPrime) 
     { 
      System.out.println(i); 
     } 
    } 

} 

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

Is it bad practice to use break to exit a loop in java?

+0

@StephenC и источник для этого? Мне нравится, чтобы мой код был ясным и избегал перерывов, если простой флаг делает трюк –

+1

@MauricioGracia нет «источника» для написания элегантного кода. Простой 'break' облегчает отслеживание потока кода, так как вам не нужно идти туда и обратно, чтобы увидеть, что должен делать код, когда значение' isPrime' установлено равным false. – alfasin

+0

Что читается, «если это простое число, напечатайте его». И элегантный код очень субъективен –

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