Функция определения простоты числа на JS

Функция определяет число простое или нет. Если вызвать функцию в консоль лог, результат корректный, если перебирать числа от 0 до некоторого в цикле фор, некоторые числа выдают не корректное значение, не вижу где ошибся.

let i = 3; //Старт для перебора функции симпл
let lim = 25; //лимит до которого выводть последовательность простых чисел

function simple(x) { //Функция определения простоты числа
    if (x == 1) {
        return false;
    };
    if (x == 2) {
        return true;
    };

    if (x % 2 == 0) {
        return false;
    }

    while (i * i <= x) {
        if (x % i == 0) {
            return false;
        } else (i++);
    };
    return true;
};

 console.log(simple(15)); //Проверяем что 15 точно фолс вне перебора ниже

 for (q = 0; q < lim; q++) {
    if (simple(q) == true) {
        console.log(q); //Перебор доходит до 15 и выдает тру
    };
};


Ответы (1 шт):

Автор решения: Egettl

Следует поменять let i = 3; //Старт для перебора функции симпл на var i = 3; //Старт для перебора функции симпл и перенести в тело функции simple. Иначе i не переопределяется с прошлых циклов проверки.

let lim = 25; //лимит до которого выводть последовательность простых чисел

function simple(x) { //Функция определения простоты числа

    var i = 3; //Старт для перебора функции симпл
    
    if (x == 1) {
        return false;
    };
    if (x == 2) {
        return true;
    };

    if (x % 2 == 0) {
        return false;
    }

    while (i * i <= x) {
        if (x % i == 0) {
            return false;
        } else (i++);
    };
    return true;
};

 console.log(simple(15)); //Проверяем что 15 точно фолс вне перебора ниже

 for (q = 0; q < lim; q++) {
    if (simple(q) == true) {
        console.log(q); //Перебор доходит до 15 и выдает тру
    };
};

→ Ссылка