Project Euler Крупнейшая ошибка Prime Factor в Javascript

Я новичок в javascript и изо всех сил пытаюсь понять, почему это не работает.

function largestPrimeFactor(num) {
  var primeFactors = [];
  for (var i = 2; i < num; i++) {
    // check if iter i is prime
    if (checkIfPrime(i)) {
      // if so, see if its a factor of num
      while (num % i === 0) {
        num /= i;
        primeFactors.push(i);
        console.log(primeFactors);
        console.log(num);
      }
    }
    if (num === 1) {
      // return Math.max.apply(Math, primeFactors) 
      console.log(primeFactors);
      console.log(Math.max.apply(Math, primeFactors));
    }
  }
}

function checkIfPrime(num) {
  for (var i = 2; i < num; i++) {
    if (num % i === 0) {
      return false;
    }
  }
  return true;
}

console.log(largestPrimeFactor(13195));

Окончательный console.log никогда не срабатывает для последнего простого числа 29. Я также никогда не ввожу последний случай if(num === 1), и я тоже не знаю, почему...

Когда я повторяю до 29, checkIfPrime(i) должно быть true, а затем после того, как 29 / 29 устанавливает num в 1, последний случай if тоже должен работать.

Почему это не работает??

Второй Q - есть

return Math.max.apply(Math, primeFactors)

правильный способ вернуть максимальное значение из массива целых чисел?

Спасибо!


person Canovice    schedule 26.02.2018    source источник
comment
Задавайте один вопрос на вопрос. (Ответ на ваш второй вопрос: да, все в порядке.)   -  person T.J. Crowder    schedule 27.02.2018
comment
Честно говоря, я не думаю, что вам нужно использовать Math.max... i и primeFactors.pop() в этот момент оба будут равны 29.   -  person Jaromanda X    schedule 27.02.2018
comment
но зачем вам вычислять все простые множители, если вам нужен только последний. Мне любопытно, сколько времени это займет для 600851475143   -  person Slai    schedule 27.02.2018


Ответы (1)


for(var i = 2; i < num; i++) { // line 3

Итак, если num равно 29, i может перейти только к 28. Следует изменить < на <=.

person coyotte508    schedule 26.02.2018
comment
это точно соответствует моей проблеме - обновление до ‹= заставляет все это работать. - person Canovice; 27.02.2018