`

计算素数优化

    博客分类:
  • java
阅读更多

列出小于1000的素数,对于这样的算法好多人都会,但对于编程人员,要对这样的算法做优化,会有不同的算法了,以下为我自己的两种算法做比较:

 

算法一,大众算法。用两个循环法。

public class Test {

	public static void main(String[] args) {
		
		long start = System.currentTimeMillis();
		
		for (int i = 2; i < 100000; i++) {
			if(prime(i))
				System.out.println(i);
		}

		
		System.out.println("take times : " + (System.currentTimeMillis() - start));
	}
	
	private static boolean prime(int n){
		
		for (int i = 2; i < n; i++) {
			if(n % i == 0)
				return false;
		}
		
		return true;
	}

}

 

算法二,优化后的算法

public class Test2 {

	public static void main(String[] args) {
		
		long start = System.currentTimeMillis();
		
		for (int i = 2; i < 100000; i++) {
			if(prime(i))
				System.out.println(i);
		}

		
		System.out.println("take times : " + (System.currentTimeMillis() - start));
	}
	
	private static boolean prime(int n){
		
		if(n % 2 == 0)
			return n == 2;
		
		for (int i = 3; i*i <= n; i = i + 2) {
			if(n % i == 0)
				return false;
		}
		
		return true;
	}


}

 

以上两个算法比较(数据量越大结果对比越明显):

elipse下运行计算 算法一耗时(ms) 算法二耗时(ms)
小于1000 7 5
小于100000 4590 237
分享到:
评论
2 楼 tombigun 2011-10-09  
qiii2006 写道
double y = Math.sqrt(n);
        for (int i = 3; i <= y; i = i + 2) {
            if (n % i == 0)
                return false;
        }


还能更快点。



对,能减小i*i <= n这运算
1 楼 qiii2006 2011-09-19  
double y = Math.sqrt(n);
        for (int i = 3; i <= y; i = i + 2) {
            if (n % i == 0)
                return false;
        }


还能更快点。

相关推荐

Global site tag (gtag.js) - Google Analytics