我是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 / 29
将num
设置为1后,最后if
个案应该有效太。
为什么这不起作用?
第二个Q - 是
return Math.max.apply(Math, primeFactors)
从整数数组中返回最大值的正确方法吗?
谢谢!
答案 0 :(得分:2)
for(var i = 2; i < num; i++) { // line 3
因此,如果num
为29,i
只能转到28.应将<
更改为<=
。