java筛选法求素数

这本身没什么,代码一堆

发来纪念下而已

 

本来刚学习java,编写输出100以内的素数

对于我这个有代码运行性能洁癖的人(但是本身又不懂算法)来说,不能忍

 

于是看了些资料

参考:

http://blog.csdn.net/program_think/article/details/7032600

 

自己山寨一个

(注意是山寨,那就是抄袭改改而已)

public class TestPrime{
    // 程序的入口
    public static void main(String args[]){
        // 向控制台输出信息
        System.out.println("TestPrime");
        long startTime=System.curreTestPrimentTimeMillis();
        int num = 1000000;//100W
        //生成2到num的数组
        int[] array = new int[num];
        for (int i = 2; i < num; i++) {
                array[i] = i;
        }
        //这就是筛选法了
        for (int i = 2; i < num; i++) {
            if (array[i] != 0) {
                int j, temp;
                temp = array[i];
                for (j = 2 * temp; j < num; j = j + temp) {
                    array[j] = 0;
                }
      //输出非常耗时间 100w千万不要拿去输出 你懂得
                //System.out.print(array[i] + " ");
            }
        }
        //计算运行时间
        long endTime=System.currentTimeMillis();
        System.out.println("程序运行时间:"+(endTime-startTime)+"ms");
    }
}

没有输出的运行时间的结果

当然这个是我的主机
100w 大概 50-70ms
一般都是50几

上面的可能还有优化的余地

 if (array[i] != 0) 如果直接把数组赋值为bool会不会更快 这一点我不能确定

还有一些细节的东西

自己去调试吧

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。