Число простое и различается на 2 от 3^2
Задача написать функцию, которая будет проверять является ли число простым и в тоже время отличается на 2 от 3^2. Я написал так:
const f = (string) => {
const isPrime = num => {
for(let i = 2; i < num; i++) {
if (num % i === 0) {
return false
};
return true;
}
}
const symb = parseInt(string);
if (isPrime(symb) && symb + 2 > Math.pow(3, 2)) {
return true;
} else {
return false;
}
}
console.log(f("7")); // false
console.log(f("77")); // true
console.log(f("71")); // true
В результате должно получиться так:
console.log(f("7")); // true
console.log(f("77")); // true
console.log(f("71")); // false
Что не так?
Ответы (3 шт):
Автор решения: Zhihar
→ Ссылка
Что не так?
в функции
isPrimefor(let i = 2; i < num; i++) { if (num % i === 0) { return false }; return true; }
return true надо было бы использовать ниже, у вас же получается что уже на i = 2 будет выход с true
т.е. выход из функции происходит всегда на первом этапе цикла
надо так:
for(let i = 2; i < num; i++) {
if (num % i === 0) {
return false
};
}
return true;
(небольшое замечание) в функции
isPrimefor(let i = 2; i < num; i++) {
зачем проверять множители до num, когда достаточно до sqrt(num) включительно
работать будет быстрее
Автор решения: Кирилл Панишев
→ Ссылка
">" надо заменить на ">="
const f = (string) => {
const isPrime = num => {
for(let i = 2; i < num; i++) {
if (num % i === 0) {
return false
};
return true;
}
}
const symb = parseInt(string);
if (isPrime(symb) && symb + 2 >= Math.pow(3, 2)) {
return true;
} else {
return false;
}
}
Автор решения: MBo
→ Ссылка
будет проверять является ли число простым и в тоже время отличается на 2 от 3^2.
Достаточно одной таблэтки:
return ((i==7) || (i==11))