Как решить JavaScript кучи памяти в упражнении с простыми числами - PullRequest
1 голос
/ 05 августа 2020

У меня проблема с пониманием этой проблемы. Я пытаюсь найти простые числа, которые использовались для создания этого числа 992,474,117

, чтобы сделать это, я применил следующий код:

function primeFactorsTo(max)
{
    var store  = new Array(max), i, j, primes = new Array(max);
    for (i = 2; i <= max; ++i) 
    {
        if (!store [i]) 
          {
            primes.push(i);
            for (j = i << 1; j <= max; j += i) 
            {
                store[j] = true;
            }
        }
    }
    return primes;
}

primeFactorsTo(992474117)

Когда я запускаю этот код, я получаю >> ФАТАЛЬНАЯ ОШИБКА: сбой при выделении недопустимого размера таблицы - JavaScript куча из памяти << </p>

I видел несколько решений, в которых мне нужно применить больший размер старого пространства с

node --max-old-space-size=4096 yourFile.js

, но все равно ничего не работает. В чем может быть проблема? Как понять это? Цените помощь

1 Ответ

1 голос
/ 05 августа 2020
  1. Вы должны инициализировать массив primes как пустой массив в начале
  2. Вам нужно только l oop до квадрата root числа.
  3. Найдя простой множитель, продолжайте делить число на него, пока оно не перестанет делиться, чтобы избежать необходимости в массиве store.

function primeFactorsTo(max)
{
    var primes = [];
    for (i = 2; i * i <= max; ++i) 
    {
        if(max % i === 0){
          primes.push(i);//found prime factor
          while(max % i === 0) max /= i;
        }
    }
    if(max > 2) primes.push(max);//largest prime factor
    return primes;
}

console.log(primeFactorsTo(992474117));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...