2014-09-11 2 views
1

Этот код вычисляет простые числа, но как он работает? Мне нужно четкое объяснение того, что делает if (band) в конце.Основной номер: Как работает этот код?

public class Primes { 

    public static void main(String[] args) { 
     int m; 
     boolean band; 

     for (int i = 2; i < 100; i++) { 
      m = 2; 
      band = true; 

      while (band && m <i) {  
       if (i % m == 0) { 
        band = false; 
       } else { 
        m++; 
       } 
      } 

      if (band) { 
       System.out.println("The number " + i + " is prime"); 
      } 
     } 
    } 
} 
+5

Попробуйте отладку. – TheLostMind

+3

Что не «понятно» в программе выше? – VinayVeluri

+0

Я не понимаю логики –

ответ

3

Это просто печать простых чисел между 2 -99.

Из цикла for он выполняет итерацию чисел между 2 - 99. Внутри цикла он проверяет, делится ли конкретное число (i) на m без каких-либо остатков. Если оставшееся увеличение значения m на единицу до m < i и повторите процесс. Если не осталось, то это простое число, затем сделайте диапазон истинным и напечатайте вывод. Поскольку диапазон истинен, теперь он выйдет из цикла while и перейдет к следующей итерации цикла for.

+0

спасибо @Thusitha –

2

Попробуйте переименовать переменную band в i_is_prime, а затем попытайтесь проследить логику. Ключевая линия это одна:

if (i%m==0) { 

Эта строка возвращает true если m делит равномерно на i, что означает i не является простым.

+0

Спасибо! @ Ryan Bemrose –

1

Этот метод, чтобы найти все простые числа меньше чем 100

// This is the dividend 
int m;  
// Whether can't divisible 
boolean band;  

// From 100 all digital lookup 
for (int i=2;i<100;i++){ 
     // Divisor increasing from 2 
    m=2; 
    // If not divisible, here defined as cannot be divided exactly by first, if we can find a divisor aliquot, the current number is not a prime 
    band=true; 
    // From 2 to the current number one by one 
    while(band && m <i){  
      // Remainder of 0, explain aliquot, band = false, jump out the while 
     if(i%m==0){ 
      band=false; 
     }else{ 
     // Remainder is not 0, i cannot be divided exactly by m, continue to verify the m + 1 
      m++; 
     } 
    } 
    // From 2 to i-1 cannot be divisible, that i was a prime number 
    if(band){ 
     System.out.println("The number "+i+" is prime"); 
    } 
} 
0
  • После выхода из в то время как "если (группа)" проверяет, что противопоказано 'я' IS PRIME или НЕ.
  • Вы должны использовать значащие имена для идентификаторов, поэтому измените BAND на IS_PRIME.
  • И алгоритм, который вы использовали, очень трудоемкий, попробуйте реализовать Сито из Eratosthenes имеет O (nlog (log (n))) вычислительная сложность, которая является большой и простой.

Check Sieve of Eratosthenes

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