原方案:
代码:
public class PrimeNumberTest1 {
public static void main(String[] args) {
System.out.println("100以内的质数为:");
//获取当前时间毫秒数
long start = System.currentTimeMillis();
boolean isFlag = true;
for(int i = 2;i <= 100000;i++) {//遍历100000以内的自然数
for(int j = 2;j < i;j++) {
if(i % j == 0) {
isFlag = false;
}
}
if(isFlag == true) {
System.out.println(i);
}
isFlag = true;
}
//获取当前时间的毫秒数
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:"+(end-start));
}
}
输出:
100以内的质数为:
2
3
…………(省略n行)
99989
99991
所花费的时间为:11438
优化一:break
代码:
public class PrimeNumberTest1 {
public static void main(String[] args) {
System.out.println("100以内的质数为:");
//获取当前时间毫秒数
long start = System.currentTimeMillis();
boolean isFlag = true;
for(int i = 2;i <= 100000;i++) {//遍历100000以内的自然数
for(int j = 2;j < i;j++) {
if(i % j == 0) {
isFlag = false;
break;//优化:只对非质数的自然数是有效的,可以避免不符合条件的数执行下面的程序
}
}
if(isFlag == true) {
System.out.println(i);
}
isFlag = true;
}
//获取当前时间的毫秒数
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:"+(end-start));
}
}
输出:
100以内的质数为:
2
3
…………(省略n行)
99
99989
99991
所花费的时间为:1208
优化二:只取一部分有效的除数
代码:
public class PrimeNumberTest1 {
public static void main(String[] args) {
System.out.println("100以内的质数为:");
//获取当前时间毫秒数
long start = System.currentTimeMillis();
boolean isFlag = true;
//优化二:对本身是质数的自然数是有效的,使得被除得数减少。
for(int i = 2;i <= 100000;i++) {//遍历100000以内的自然数
for(int j = 2;j <= Math.sqrt(i);j++) {
if(i % j == 0) {
isFlag = false;
break;//优化一:只对非质数的自然数是有效的,可以避免不符合条件的数执行下面的程序
}
}
if(isFlag == true) {
System.out.println(i);
}
isFlag = true;
}
//获取当前时间的毫秒数
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:"+(end-start));
}
}
输出:
100以内的质数为:
2
3
…………(省略n行)
99989
99991
所花费的时间为:57
其他方面优化:改为统计质数的个数
代码:
public class PrimeNumberTest1 {
public static void main(String[] args) {
System.out.println("100以内的质数为:");
//获取当前时间毫秒数
long start = System.currentTimeMillis();
boolean isFlag = true;
int count = 0;//记录质数得个数
//优化二:对本身是质数的自然数是有效的,使得被除得数减少。
for(int i = 2;i <= 100000;i++) {//遍历100000以内的自然数
for(int j = 2;j <= Math.sqrt(i);j++) {
if(i % j == 0) {
isFlag = false;
break;//优化一:只对非质数的自然数是有效的,可以避免不符合条件的数执行下面的程序
}
}
if(isFlag == true) {
count++;
}
isFlag = true;
}
//获取当前时间的毫秒数
long end = System.currentTimeMillis();
System.out.println("质数的个数为:"+count);
System.out.println("所花费的时间为:"+(end-start));
}
}
输出:
100以内的质数为:
质数的个数为:9592
所花费的时间为:18