列出小于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 相关文章
                            相关文章