我是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));
最终的控制台。log永远不会在最后一个质数29中脱颖而出。我也从未输入最后一个 if(num === 1)
案例,我也不知道为什么...
当我最多迭代29时,checkIfPrime(i)
应为true
,然后在29 / 29
设置num
为1之后,最后一个if
情况也应起作用。
为什么这不起作用?
第二Q-是
return Math.max.apply(Math, primeFactors)
从整数数组返回最大值的正确方法?
谢谢!
for(var i = 2; i < num; i++) { // line 3
因此,如果num
为29,i
只能转到28。应将<
更改为<=
。