JavaScript

Chto tyt ne tak?

Почему после исстины в for break не останавливает перебор цикла? Или дело не в этом?
 let flag = false 
let num = 8

for ( let i = 2; i
Roland Traskovskij
Roland Traskovskij
84
 const isPrime = (x) => { 
let p;
if (x === 1) p = false;
else if (x === 2) p = true;
else if (0 === x % 2) p = false;
else if (x < 6) p = true;
else if (0 === x % 3 || 0 === x % 5) p = false;
else {
let n;
for (n = 3; n * n x;
}
return p;
};
const program = () => {
let num;
while (true) {
let str = prompt("Введите целое положительное число");
if (str == null) break;
num = Number.parseFloat(str);
if (isNaN(num)) {
console.log("Ошибка: не число!");
} else {
if (Number.isInteger(num) && num >= 0) {
console.log(isPrime(num) ? "число простое" : "число составное");
} else {
if (!Number.isInteger(num)) {
console.log("Ошибка: не целое число!");
}
if (num < 0) {
console.log("Ошибка: отрицательное число!");
}
}
}
}
};
program();
Морозов Михаил
Морозов Михаил
71 750
Лучший ответ
  1. flag == true заменено на flag = true. Для присваивания значения переменной используется оператор =, а не оператор сравнения ==.
  2. В цикле проверки делителей число i изменено на Math.sqrt(num), чтобы уменьшить количество итераций. Достаточно проверить делители до квадратного корня числа, чтобы определить, является ли оно составным или простым.
  3. Добавлена точка с запятой после каждого выражения.
Теперь код должен работать корректно и выводить правильное сообщение о том, является ли число простым или составным.
 let flag = false; 
let num = 8;

for (let i = 2; i
Виктор Герман
Виктор Герман
59 846
Ваш код не работает, потому что в строке flag == true вы используете оператор сравнения == вместо оператора присваивания =.
Так как тебе уже дали ответ, дам тебе ещё совет. Нет смысла делить 8 на числа вплоть до 1000. Всё что выше 8 даст тебе число меньше 1.
8 / 9 = 0.889...
8 / 10 = 0.8
8 / 11 = 0.73...
И так далее.
V K
V K
23 960
 let flag = false  
let num = 8

for (let i = 2; i
Сергей Козлов
Сергей Козлов
6 773
V K Как бы ты оптимизировал этот код? :)
Roland Traskovskij ну так рано или поздно i не станет 8? Получается тут в любом случает будет " число составное "?
У меня всё именно так и случается. А вот так:
 let flag = false 
let num = 101

for ( let i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
flag = true
break;
}
}
if ( flag ) {
console.log( 'число составное' )
} else {
console.log( 'число простое' )
}
Вроде всё работает правильно
Вместо if ( flag === true ) пишется if (flag)
Твою ошибку сергио написал
В этом коде после первого условия if ( num % i === 0) происходит присваивание переменной flag значения true, затем происходит выход из цикла с помощью команды break.
После выхода из цикла переменная flag остается равной true, поэтому в условии if ( flag === true) всегда будет true и функция console.log будет выводить сообщение “число составное”.
Если вы хотите, чтобы цикл останавливался при первом же найденном составном числе, нужно добавить еще одно условие if:
if (num % i === 0 && flag === false) { flag = true; break; }
V K Ерунду написали.
Мало того что не заметили явную ошибку, так и ещё код предоставили который ни на что не влияет и результат даёт идентичный (если не учитывать ошибку).