`
gygwoaini
  • 浏览: 5845 次
  • 性别: Icon_minigender_1
  • 来自: 绵阳
文章分类
社区版块
存档分类
最新评论

关于求1000万以内所有质数的快速算法

 
阅读更多
今天重新浏览了之前的一个老帖,帖子的基本内容大概是讨论求100以内质数(素数)的方法,随意看了一下,自己随意写了一个,稍稍优化一下就不管了。今天突然想起又去仔细看了看,帖子后来变成讨论求出1000万以内所有质数的算法。
再用自己的程序跑了一下,发现用时18秒,惭愧啊。
找了一个高手的回答跑了一下,发现用时400毫秒。。。差距啊。

他的代码如下:
static void ListPrime(int n) { 
        /**
         * false为质数,true为合数
         */ 
        boolean[] primeList = new boolean[n + 1]; 
 
        for (int i = 2; i <= n; i++) { 
            if (!primeList[i]) { 
                int j = i * i; 
                if (j > n) 
                    break; 
                if (i > 2) { 
                    while (j <= n) { 
                        primeList[j] = true; 
                        j = j + i + i; 
                    } 
                } else { 
                    while (j <= n) { 
                        primeList[j] = true; 
                        j = j + i; 
                    } 
                } 
            } 
        } 
        List<Integer> ret = new ArrayList<Integer>(10000); 
        ret.add(2); 
        for (int i = 3; i <= n;) { 
            if (!primeList[i]) { 
                //System.out.print(i + " ");   
                ret.add(i); 
            } 
            i += 2; 
        } 
        System.out.println(ret.size());
    } 

中间的核心代码没有看懂,先记下来,在琢磨琢磨
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics