2014-03-26 81 views
0

我剛剛創建了一個運行一段時間的for循環的素數查找器。現在它在167899並且每秒都在增長。For Loop Max JavaScript

循環可以經過的循環的最大數量是多少?如果它是一個不敬虔的大數字,我不希望等待整晚,看看我能產生的最大質數是多少。

它是無限的嗎?

這裏是我的代碼:

 var isNotPrime = false; 
     var currentNumber = 3; 
     var primeArray = [2]; 

     function prime(){ 
      isNotPrime = false; 
      for(a=0; a<primeArray.length; a++){ 
       if(currentNumber%primeArray[a] === 0){ 
        isNotPrime = true; 
       } 
       if(a===(primeArray.length-1) && isNotPrime ===false){ 
         document.write(currentNumber+"<BR>"); 
         primeArray.push(currentNumber); 
       } 
       if(a===(primeArray.length-1)){ 
        currentNumber++; 
       } 
      } 
     } 

     var main = setInterval(prime, 1); 

     window.alert("Starting search for Prime Numbers!"); 
+0

可能的重複[如何計算循環可以在Javascript中運行的最大次數?](http://stackoverflow.com/questions/8256785/how-to-calculate-that-to-what-最大循環次數可以在javasc中運行) – bjb568

+0

您還可以將循環限制爲javascript 2^52的最大整數。對於非常大的素數,我推薦使用支持非常大的數字,C和Python的庫:https://gmpy2.readthedocs.org/en/latest/mpz.html#mpz-methods – bitoiu

回答

2

有一個迴路可以執行,因爲你可以有一個無限循環的次數沒有上限:

for (var i = 0; i < 1;) { console.log('this will keep running forever' } 

(注意,增量步驟之後for循環的i < 1;爲空,而不是i++

但是,重新是一個max integer in Javascript,這可能是你以後的事情。

+0

我看到它不是循環有一個最大值,但你可以設置我的值。 – Zachooz

+0

OMG我的循環會永遠運行T_T。我永遠不會看到最接近9,007,199,254,740,992的素數 – Zachooz

1

只要長度是一個整數,它就可以並將繼續循環。 int的最大值是9 007 199 254 740 992. 因此循環有可能運行多次。

1

您可能需要使用web worker來防止瀏覽器中斷進程。使用網絡工作者時,循環有可能無限期地運行(直到計算機停止運行)。

正如其他人所指出的那樣,您會遇到處理大量問題的問題。可能有辦法解決JavaScript中的整數精度限制:http://www.2ality.com/2012/07/large-integers.html

因此,對第一個問題的回答是否,JavaScript沒有明確定義的最大循環數。

第二個問題的答案取決於進程在哪裏運行。如果過程在真正的機器上運行,最終會由於熵而遭受失敗,則循環的數量不能是無限的。如果進程在虛擬機中運行,則可以使進程無限期地運行(直到宇宙熱死亡)。