Сито алгоритма Эратосфена в JavaScript работает бесконечно для большого числа

Я пытался написатьСито Эратосфена алгоритм в JavaScript. В основном я буквально следовал за шагами ниже:

Создайте список последовательных целых чисел от 2 до (n-1)Пусть первое простое число p равно 2Начиная с p, посчитайте с шагом p и уберите каждое из этих чисел (p и кратные p)Перейти к следующему номеру в списке и повторить 2,3,4Добавить непреднамеренно удаленные простые числа обратно в список

и вот что я придумал:

function eratosthenes(n){
var array = [];
var tmpArray = []; // for containing unintentionally deleted elements like 2,3,5,7,...
var maxPrimeFactor = 0;
var upperLimit = Math.sqrt(n);
var output = [];

// Eratosthenes algorithm to find all primes under n

// Make an array from 2 to (n - 1)
//used as a base array to delete composite number from
for(var i = 2; i < n; i++){
    array.push(i);
}

// Remove multiples of primes starting from 2, 3, 5,...
for(var i = array[0]; i < upperLimit; i = array[0]){
    removeMultiples: 
    for(var j = i, k = i; j < n; j += i){
        var index = array.indexOf(j);
        if(index === -1)
            continue removeMultiples;
        else
            array.splice(index,1);
    }
    tmpArray.push(k);
}
array.unshift(tmpArray);
return array;
}

Он работает для небольших чисел, но не для чисел, превышающих миллион. Я использовал Node.js для тестирования, и процесс кажется бесконечным, и никаких ошибок памяти не обнаружено. Я'мы прочитали решениеВот(также в javascript), но все еще не может полностью понять это.

Вопрос: Как заставить это работать для достаточно больших чисел, таких как миллион и выше?

Ответы на вопрос(4)

Ваш ответ на вопрос