【发布时间】:2015-07-07 18:03:35
【问题描述】:
我试图通过从最大可能的因子向后工作来确定一个数字的最大素因子。一旦找到一个因子,我会使用原始函数中的 PrimeTest3 函数来测试它是否为素数。
但是,它并没有给出我所期望的数字 13195 的答案。当我使用“此通过测试”语句测试如上所示的代码时,我可以看到它正在跳过找到的第一个因素(2639) 到找到的最后一个因子 (5),奇怪的是,当记录通过 PrimeTest3 传递 i 的结果时,它显示为 false,即使首先传递 if 语句必须是 true。
var largestPrimeFactor3 = function (num) {
function PrimeTest3(a){
if (a<=1 || a%1!=0)
return false;
limit = Math.ceil(Math.pow(a,.5));
if (a%2==0 || a%3==0)
return false;
if (a==2 || a==3)
return true;
for (i=6;i<limit;i+=6){
if (a%(i-1)==0)
return false;
if (a%(i+1)==0)
return false;
}
return true;
}
for(var i = Math.floor(num/2); i>0; i--){
console.log(i);
if(num % i === 0 && PrimeTest3(i)){
console.log('this passed the test:' + PrimeTest3(i));
return true;
}
}
}
console.log(largestPrimeFactor3(13195));
非常感谢任何帮助或澄清。谢谢!!
【问题讨论】:
-
最好给我们添加一个语言标签。
-
感谢 Jongware 的建议并感谢 Lee 的编辑!
-
请注意:您不是从最大可能的因素向后工作。例如,3 * 17 = 51,sqrt(51) ≈ 8, 17 > 8。
标签: javascript if-statement for-loop primes