Выполнение деления по модулю во вложенном цикле
В 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 шт):
if((x%y)==0) { z=false; break; }
if((77%8)==0) принимает ложное значение, и z остаётся true,
К этому времени z уже false и останется false до конца внутреннего цикла. Поэтому внутренний цикл можно прервать, как только код зайдет в if.
Я так и не понял что ты хочешь, но вот моя реализация этого задания.
Даже если это не то, пусть будет :)
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);
}
}