质数是只能被自身和1整除的自然数,并且最小的质数为2。
未优化版:
public class Main{
public static void main(String[] args){
//初始化标志位为true
boolean isFlag = true;
long start = System.currentTimeMillis();
//最小的质数为2,所以求解1000以内的质数,需要从2开始遍历。
for(int i = 2; i <= 1000; i++){
//质数是只能被1和自身整除的数字,所以排除1和自身,如果能够整除,说明这个数字不是质数。
for(int j = 2; j < i; j++){
if(i % j == 0){
//对2到999的数字进行全部的遍历操作。
isFlag = false;
}
}
//循环结束后,如果标志位为true,说明这个数字是质数。
if(isFlag == true){
System.out.print(i + " ");
}
//将标志位进行还原,以便进行下一轮的循环。
isFlag = true;
}
long end = System.currentTimeMillis();
System.out.print("\n" + (end - start));
}
}
优化版(1):
public class Main{
public static void main(String[] args){
//初始化标志位为true
boolean isFlag = true;
long start = System.currentTimeMillis();
//最小的质数为2,所以求解1000以内的质数,需要从2开始遍历。
for(int i = 2; i <= 1000; i++){
//质数是只能被1和自身整除的数字,所以排除1和自身,如果能够整除,说明这个数字不是质数。
for(int j = 2; j < i; j++){
if(i % j == 0){
//只要能被2到999其中一个数字整除,就说明不是质数,不需要进行全部遍历。
isFlag = false;
break;
}
}
//循环结束后,如果标志位为true,说明这个数字是质数。
if(isFlag == true){
System.out.print(i + " ");
}
//将标志位进行还原,以便进行下一轮的循环。
isFlag = true;
}
long end = System.currentTimeMillis();
System.out.print("\n" + (end - start));
}
}
优化版(2):
public class Main{
public static void main(String[] args){
//初始化标志位为true
boolean isFlag = true;
long start = System.currentTimeMillis();
//最小的质数为2,所以求解1000以内的质数,需要从2开始遍历。
for(int i = 2; i <= 1000; i++){
//质数是只能被1和自身整除的数字,所以排除1和自身,如果能够整除,说明这个数字不是质数。
for(int j = 2; j <= Math.sqrt(i); j++){
if(i % j == 0){
//进一步减少不必要的循环次数。
isFlag = false;
break;
}
}
//循环结束后,如果标志位为true,说明这个数字是质数。
if(isFlag == true){
System.out.print(i + " ");
}
//将标志位进行还原,以便进行下一轮的循环。
isFlag = true;
}
long end = System.currentTimeMillis();
System.out.print("\n" + (end - start));
}
}
优化版(3):
public class Main{
public static void main(String[] args){
long start = System.currentTimeMillis();
//最小的质数为2,所以求解1000以内的质数,需要从2开始遍历。
label: for(int i = 2; i <= 1000; i++){
//质数是只能被1和自身整除的数字,所以排除1和自身,如果能够整除,说明这个数字不是质数。
for(int j = 2; j <= Math.sqrt(i); j++){
if(i % j == 0){
//不使用标志位进行质数判断,如果不是质数,直接跳出内层循环。
continue label;
}
}
System.out.print(i + " ");
}
long end = System.currentTimeMillis();
System.out.print("\n" + (end - start));
}
}