Моя задача вывести все простые числа от firstNumber до n
let firstNumber = prompt("Введи первое число", 2);
let n = prompt("Введи n:", 10);
for (let i = firstNumber; i <= n; i++) {
if ((i <= 1) || (n < 2)) {
i = prompt("Введи первое число", 2);
n = prompt("Введи n:", 10);
} else {
сontinue;
}
for (let j = 2; j < n; j++) {
if ((i % j) === 0) {
console.log(i);
document.write(i + "<br/>");
} else {
continue;
}
}
}
Подскажите в чём у меня ошибка? Почему не срабатывает код?
Ответы (1 шт):
Во-первых, нужно, как правильно сказано в комментариях, вынести проверку введенных значений за цикл.
Во-вторых, во втором цикле, в условии for, стоит поменять n на i. Тогда этот цикл будет перебирать, как и нужно, числа от 2 до текущего числа из заданного интервала.
В-третьих, у вас получилось так, что число посчитается простым и выведется каждый раз, когда нацело поделится на любое число до себя.
Самый простой вариант - ввести перед внутренним циклом специальную булевую переменную, которая по умолчанию будет true. Если хоть раз условие, которое дано в вашем втором цикле, проходит, нужно выдать этой переменной false и выйти из цикла (чисто ради производительности, в дальнейших действиях нет смысла, число точно не простое).
А после этого вложенного цикла - проверка той переменной. Если она осталась true, то число простое и его можно вывести, в противном случае ничего делать с ним не надо.
У меня понятно получилось объяснить?)