gpt4 book ai didi

javascript - for 循环无意中中断 if 语句

转载 作者:行者123 更新时间:2023-11-30 16:54:36 32 4
gpt4 key购买 nike

我试图通过从最大可能因子向后计算来确定一个数的最大质因数。找到因子后,我会使用原始函数中的 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));

非常感谢任何帮助或澄清。谢谢!!

最佳答案

PrimeTest3 中的 for 循环使用与 largestPrimeFactor3 中的循环相同的变量 i。您需要使用 var 声明将此变量声明为内部函数的局部变量。

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 (var 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));

关于javascript - for 循环无意中中断 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29927021/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com