输出100000以内的质数的个数:
一、无优化前
boolean isFlag = true;//标识i是否被除尽
int count=0;
long start=System.currentTimeMillis();//获取当前时间的毫秒数
for (int i = 2; i <= 100000; i++) {
for (int j = 2; j <=i; j++) {
if (i % j == 0) {
isFlag = false;//被除尽不是质数
}
}
if (isFlag == true) {//如果是质数就输出
// System.out.print(i+" ");
count++;
}
isFlag=true;
}
long end=System.currentTimeMillis();//获取结束当前时间
System.out.println(“质数的个数:”+count);
System.out.print(“所花费的时间为:”+(end-start));
二、优化一:
public class PrimeNumber {
public static void main(String[] args) {
boolean isFlag = true;//标识i是否被除尽
int count=0;
long start=System.currentTimeMillis();//获取当前时间的毫秒数
for (int i = 2; i <= 100000; i++) {
for (int j = 2; j < i; j++) {
// for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
isFlag = false;//标记被除尽不是质数
break;
}
}
if (isFlag == true) {//如果是质数就输出
// System.out.print(i+" ");
count++;
}
isFlag=true;
}
long end=System.currentTimeMillis();//获取结束当前时间
System.out.println(“质数的个数:”+count);
System.out.print(“所花费的时间为:”+(end-start));
}
三、二次优化:
boolean isFlag = true;//标识i是否被除尽
int count=0;
long start=System.currentTimeMillis();//获取当前时间的毫秒数
for (int i = 2; i <= 100000; i++) {
// for (int j = 2; j < i; j++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
isFlag = false;//标记被除尽不是质数
break;
}
}
if (isFlag == true) {//如果是质数就输出
// System.out.print(i+" ");
count++;
}
isFlag=true;
}
long end=System.currentTimeMillis();//获取结束当前时间
System.out.println(“质数的个数:”+count);
System.out.print(“所花费的时间为:”+(end-start));
当数据越大,对于时间的比较越明显,一个好的算法和处理问题的机制,能帮我们时间的复杂度问题。
}