2014-03-26 83 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没有明确定义的最大循环数。

第二个问题的答案取决于进程在哪里运行。如果过程在真正的机器上运行,最终会由于熵而遭受失败,则循环的数量不能是无限的。如果进程在虚拟机中运行,则可以使进程无限期地运行(直到宇宙热死亡)。