Почему при n=10 первый alert выведет 2? Ведь остаток от деления 2 на 2 равен нулю (во внутреннем цикле), а значит 2 не должно выводиться, хоть оно и простое, да и вообще это же не соответствует условию, т.к. 2 не меньше 2! Я что-то застрял на этом, не понимаю, как же так, помогите гуманитарию.
function showPrimes(n) {
nextPrime: for (let i = 2; i < n; i++) {
for (let j = 2; j < i; j++) {
if (i % j == 0) continue nextPrime;
}
alert( i ); // простое
}
}
showPrimes(10) // 2,3,5,7
И сразу второй вопрос. Вот другой вариант, который использует дополнительную функцию isPrime(n) для проверки на простое. Но он вообще никак не поддается моему пониманию. Изучаю JS меньше месяца, до этого так сильно не застревал. Все пройденное переосмысливал, перечитывал, гуглил свой вопрос, но ничего не помогло. Кто-нибудь мудрый и терпеливый, объясните мне это, пожалуйста, на пальцах!
function showPrimes(n) {
for (let i = 2; i < n; i++) {
if (!isPrime(i)) continue;
alert(i); // простое
}
}
function isPrime(n) {
for (let i = 2; i < n; i++) {
if ( n % i == 0) return false;
}
return true;
}
showPrimes(10) //2,3,5,7