2015-11-26 32 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,可以處理大型的數學方程,但是我不知道它是否能夠幫助解決這個問題。找出答案的唯一方法就是嘗試。希望這可以幫助。