Я пытаюсь написать функцию, которая должна вычислять все простые числа до входного параметра и возвращать его. Я делаю это для практики.
Я написал эту функцию несколькими способами, но я пытался найти новые способы сделать это для большей практики и лучшей производительности. Последнее, что я попробовал, был код ниже:
function primes(num){
let s = []; // sieve
for(let i = 2; i <= num; i++){
s.push(i);
}
for(let i = 0; i < s.length; i++) {
for(let j = s[i]*s[i]; j <= num;) {
//console.log(j);
if(s.indexOf(j)!= -1){
s.splice(s.indexOf(j), 1, 0);
}
j+=s[i];
}
}
s = s.filter(a => a != 0);
return s;
}
console.log(primes(10));
Проблема в том, что когда я запускаю это в браузере, он продолжает вычислять и не останавливается, и я не знаю почему.
Примечание: когда я закомментирую splice
и раскомментируем console.log(j);
, все работает как положено, и журналы - это то, что и должно быть, но с splice
браузер продолжает вычислять и не останавливается.
Я использую последнюю версию Chrome, но не думаю, что это может иметь какое-либо отношение к проблеме.