Natalla
@Natalla

Как с помощью циклов определить простое или составное число?

function testCycle(n) { 
var x=" "; 
var i=2; // объявляем переменную счетчика, как числовую
for (i=2; i<n; i++) { 
if (n%i==0) break;       /*логика такая: составное число делится не только на единицу и само себя, но еще на какое-то число от 2 до себя не включая себя. если убираю break, то учитывается только последнее значение i=n-1, а остальные не учитываются. например, 27 составное, а выдавало, что простое. с break тоже ничего не поменялось*/
x="Составное число"; 
if (n%i!==0) { 
x="Простое число";} 
} 

return x; 
}
//условие: решить надо только через циклы
  • Вопрос задан
  • 1090 просмотров
Пригласить эксперта
Ответы на вопрос 2
sergiks
@sergiks Куратор тега JavaScript
♬♬
Всего два возможных исхода: «простое» или «составное».
Случай с составным правильно определяется в варианте, где вы поставили break.

Но там не break нужен. У вас функция, которая должна вернуть значение. Как только обнаружили, что найден делитель, всё, можно сразу возвращать результат «Составное число».

Я бы порекомендовал такую логику: в цикле только ловите ахтунг-момент найденного делителя - и сразу возвращайте "Составное". Если же весь цикл отработал и не вылетел из функции, возвращайте "Простое". Не надо никаких «флагов» и доп. переменных. Код получается короткий и понятный.

spoiler
function testCycle(n) { 
  for (let i = 2; i < n / 2; i++)
    if (n % i === 0)
      return "Составное число"; 
  return "Простое число";
}

Примечания:
  • let – это то же, что и var, но действует не в рамках всей функции, а только в рамках блока. В данном случае, внутри цикла.
  • === – это «строгое» равенство. То же, что и ==, но ещё и проверяет, чтобы типы совпадали, т.е. не прокатит "0" === 0. Зато работает чуть быстрее.
  • проверяем не до n, а до n / 2, т. к. целые множители не могут превышать половину произведения (второй множитель не меньше 2)
Ответ написан
Комментировать
@ViktoryiaK
Здесь надо счетчик i<=n/2 или i*i<=n, потому что в исходном варианте, число 4 распознается как простое. Начальное i=2, для четверки i<4/2 это единица.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы