在Javascript中项目Euler最大的Prime Factor bug

时间:2018-02-26 23:24:02

标签: 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));

最后一个质数字29的最终console.log永远不会消失。我从来没有输入最后if(num === 1)个案,我也不知道为什么......

当我迭代到29时,checkIfPrime(i)应为true,然后在29 / 29num设置为1后,最后if个案应该有效太。

为什么这不起作用?

第二个Q - 是

return Math.max.apply(Math, primeFactors)

从整数数组中返回最大值的正确方法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

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

因此,如果num为29,i只能转到28.应将<更改为<=