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