Выполнение деления по модулю во вложенном цикле

В Java руководстве для начинающих Шилдта есть задача после второй главы, в которой необходимо написать программу, которая находила бы все простые числа в диапазоне от 2 до 100. Решение в книге предоставляется следующее:


    class test1 {
        public static void main(String args[]) {
            int x, y; boolean z;
            for(x = 2; x < 100; x++) {
                z = true;
                for(y = 2; y <= (x/y); y++) 
                    if((x % y) == 0) 
                        z = false;
                if(z) 
                    System.out.println(x);
            }
        }
    }

Например, на цикле с X=77 после предыдущей итерации Y=8.Условие вложенного цикла выполняется(8<=77/8), однако инструкция if будет выполнена только при Y=7. Компилятор производит правильное вычисление и не отображает строку. Как определяется значение Y соответствующее выполнению инструкции if((x%y)==0)?


Ответы (2 шт):

Автор решения: Igor
if((x%y)==0) { z=false; break; }

if((77%8)==0) принимает ложное значение, и z остаётся true,

К этому времени z уже false и останется false до конца внутреннего цикла. Поэтому внутренний цикл можно прервать, как только код зайдет в if.

→ Ссылка
Автор решения: Kazeev

Я так и не понял что ты хочешь, но вот моя реализация этого задания.
Даже если это не то, пусть будет :)

class test1{
  public static void main(String args[]){

    for (int i = 2; i < 100 ; i++) {
      if (!isPrime(i)) System.out.println(i);
    }
  }
  public static boolean isPrime(final int number) {
    return IntStream.rangeClosed(2, number / 2).anyMatch(i -> number % i == 0);
  }
}
→ Ссылка