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

标签 javascript if-statement for-loop primes

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

相关文章:

c - 编译器如何解释 `if(!(a=10))` ?

将此代码行转换为 C

java - 执行 if else 检查并设置值以供以后使用。寻找更清洁的方式

jquery - 建议原型(prototype)/jQuery 小部件

javascript - 为什么浏览器在使用 handlebars.js 时在 Firefox 中返回错误 "TypeError: this._input is null"(在 Chrome 中类似)?

Javascript document.execCommand "bold"在 chrome 中不起作用

javascript - 在nodejs中检查null仅得到 "Cannot read property ' 1' of null"

java - 为什么 Java 跳过 For 语句?

c - 使用用户输入查找最大和最小数字

javascript - 如何将元素 ID 传递给函数的参数? HTML/JS