2015-11-26 33 views
2

我正在处理项目欧拉问题(#3) - 最大的主要因素。JavaScript - 大型索引值导致无限循环 - 不确定为什么?

我写的代码似乎适用于较小的数字,但不适用于较大的数字(请参阅第二次函数调用)。如果我尝试这样做,它会陷入无限循环,我无法弄清楚原因。我试过JSBin测试,它做同样的事情('潜在的无限循环'),所以我不知道如何调试这个问题。

希望对此有所帮助。

这里是我的代码:

//Prime Checker 
    var isPrime = function (num) { 
    for(var i = 2; i < num; i++) { 
     if(num % i === 0) { 
     return false; 
     } 
    } 
    return true; 
    }; //end function 

    //Largest Prime Factor 
    var primeFactor = function (num) { 
    var result = 0; 
    var temp = 0; 
    var primeArr = []; 

    for (var i = 2; i <= num; i++) { 
     if (num % i === 0) { 
     temp = i; 
     if (isPrime(temp)) { 
      primeArr.push(temp); 
     } 
     } 
    } 
    console.log("primeArr: " + primeArr); 

    //sort 
    primeArr.sort(function(a,b) { 
     return b - a; 
    }); 

    result = parseInt(primeArr[0]); 
    console.log("result: " + result);   
    return result; 
    }; //end function 

    primeFactor(13195); //WORKS FINE 
    primeFactor(600851475143); //CAUSES INFINITE LOOP 
+0

你很可能内存不足,因为这个数字太大了 –

回答

1

正如评论之一提到的,如果在JavaScript的数学公式它有时会导致贯穿东西无限循环,如内存链接耗尽内存。如果你需要一个解决方案,有一些JavaScript库,比如big.js,可以处理大型的数学方程,但是我不知道它是否能够帮助解决这个问题。找出答案的唯一方法就是尝试。希望这可以帮助。