Сито алгоритма Эратосфена в 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), но все еще не может полностью понять это.
Вопрос: Как заставить это работать для достаточно больших чисел, таких как миллион и выше?