Число простое и различается на 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

Что не так?

  1. в функции isPrime

     for(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;
  1. (небольшое замечание) в функции isPrime

     for(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))
→ Ссылка