列出小于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