1、常规算法:
long startTimes = System.currentTimeMillis();
// 1、遍历100以内的自然数
for (int i = 2; i <= 100000; i++) {
// 1.1、标识i是否被j整除
boolean isFlag = true;
// 1.2 遍历从2到i的数
for (int j = 2; j < i; j++) {
// 1.2.1 如果i被j除尽,设置标识为false,标识这个数不是一个质数
if (i % j == 0) {
isFlag = false;
}
}
// 1.3 如果i未被j整除输出的本自然数一定是质数
if (isFlag == true) {
System.out.println(i);
}
}
// 2 输出结束时的毫秒数
long endTime = System.currentTimeMillis();
System.out.println("共花费: " + (endTime - startTimes) + " 毫秒时间");// 共花费: 18647 毫秒时间
1.1、算法优化-1_剔除非质数自然数
long startTimes = System.currentTimeMillis();
//1、遍历100以内的自然数
for(int i=2;i<=100000;i++) {
//1.1、标识i是否被j整除
boolean isFlag = true;
//1.2 遍历从2到i的数
for(int j=2;j<i;j++) {
//1.2.1 如果i被j除尽,设置标识为false,标识这个数不是一个质数
if(i%j == 0) {
isFlag = false;
break; //优化1 优化了非质数自然数。
}
}
//1.3 如果i未被j整除输出的本自然数一定是质数
if(isFlag == true) {
System.out.println(i);
}
}
//2 输出结束时的毫秒数
long endTime = System.currentTimeMillis();
System.out.println("共花费: "+(endTime-startTimes)+" 毫秒时间");//共花费: 1800 毫秒时间
1.2、算法优化-2_剔除多余质数
long startTimes = System.currentTimeMillis();
// 1、遍历100以内的自然数
for (int i = 2; i <= 100000; i++) {
// 1.1、标识i是否被j整除
boolean isFlag = true;
// 1.2 遍历从2到i的数
for (int j = 2; j <= Math.sqrt(i); j++) { // 优化二;优化是质数的自然数
// 1.2.1 如果i被j除尽,设置标识为false,标识这个数不是一个质数
if (i % j == 0) {
isFlag = false;
break;
}
}
}
// 2、 输出结束时的毫秒数
long endTime = System.currentTimeMillis();
System.out.println("共花费: " + (endTime - startTimes) + " 毫秒时间");// 共花费: 26 毫秒时间
2、方式二_用带lebel标签的continue对算法进行改造
long startTimes = System.currentTimeMillis();
//1、遍历100以内的自然数
label:for(int i=2;i<=100000;i++) { //加标签
//1.1、标识i是否被j整除
boolean isFlag = true;
//1.2 遍历从2到i的数
for(int j=2;j<=Math.sqrt(i);j++) {
//1.2.1 如果i被j除尽,设置标识为false,标识这个数不是一个质数
if(i%j == 0) {
continue label; //跳过所有内层循环,跳过一次外层循环
//break;
}
}
}
//2、 输出结束时的毫秒数
long endTime = System.currentTimeMillis();
System.out.println("共花费: "+(endTime-startTimes)+" 毫秒时间"); //break:共花费: 27 毫秒时间;continue label:共花费: 28 毫秒时间