Решето Эратосфена в JavaScript

Дано число n (n > 1). Выведите строку, состоящую из простых чисел, меньших n. Воспользуйтесь решетом Эратосфена. Единицу не считаем простым числом.

function testCycle(n) {
  var array = [];
  var tmpArray = [];
  var maxPrimeFactor = 0;
  var upperLimit = Math.sqrt(n);
  var output = [];


  for (var i = 2; i < n; i++) {
    array.push(i);
  }

  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.join(' ');
}

к примеру, если n = 27, то выводит 2,3,5 7 11 13 17 19 23

Почему первые числа с запятой?


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

Автор решения: Денис Степанов

function filter(number) {
  let arr = Array.from({length: number - 1}, (_, i) => i + 2);

  function helper(arr) {
    if (!arr[0] || arr[0] ** 2 > number) {return arr}
      return [arr[0], ...helper(arr.filter((element) => element % arr[0]))];
  }

  return helper(arr);
}

console.log(filter(10).join(' '));
console.log(filter(20).join(' '));
console.log(filter(100).join(' '));
console.log(filter(1000).join(' '));

→ Ссылка