1、未经任何优化
import java.text.SimpleDateFormat;
import java.util.Date;
public class ZhiShu {
public static void main(String[] args) {
Boolean isTrue = true;
long startTime = System.currentTimeMillis();
for (int i = 2; i <= 100000 ; i++) {
isTrue = true;
for (int j = 2; j <= i-1 ; j++) {
if (i % j == 0){
isTrue = false;
}
}
if (isTrue){
System.out.println(i);
}
}
long endTime = System.currentTimeMillis();
System.out.println("Cost time: "+ (endTime - startTime));//17840
}
}
2、针对非质数进行优化
import java.text.SimpleDateFormat;
import java.util.Date;
public class ZhiShuOpt1 {
public static void main(String[] args) {
Boolean isTrue = true;
long startTime = System.currentTimeMillis();
for (int i = 2; i <= 100000 ; i++) {
isTrue = true;
for (int j = 2; j <= i-1 ; j++) {
if (i % j == 0){
isTrue = false;
break;//优化一:针对非质数进行优化
}
}
if (isTrue){
System.out.println(i);
}
}
long endTime = System.currentTimeMillis();
System.out.println("Cost time: "+ (endTime - startTime));//1354
}
}
3、针对质数进行优化
import java.text.SimpleDateFormat;
import java.util.Date;
public class ZhiShuOpt2 {
public static void main(String[] args) {
Boolean isTrue = true;
long startTime = System.currentTimeMillis();
for (int i = 2; i <= 100000 ; i++) {
isTrue = true;
for (int j = 2; j <= Math.sqrt(i) ; j++) {//优化二:针对质数进行优化
if (i % j == 0){
isTrue = false;
break;//优化一:针对非质数进行优化
}
}
if (isTrue){
System.out.println(i);
}
}
long endTime = System.currentTimeMillis();
System.out.println("Cost time: "+ (endTime - startTime));//82
}
}
只需要除到根号i即可,i可拆为 1* i , 2 * i/2 , 3* i/3 , … , 根号i * 根号i. 都是成对出现,而每一对中只要有一个被除尽,那么另一个不用除也知道必定会被除尽。
4、通过带标签的continue进行优化
import java.text.SimpleDateFormat;
import java.util.Date;
public class ZhiShuOpt3 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
label1: for (int i = 2; i <= 100000 ; i++) {
label2: for (int j = 2; j <= Math.sqrt(i) ; j++) {
if (i % j == 0){
continue label1;
}
}
System.out.println(i);//能执行到这一步的都是质数
}
long endTime = System.currentTimeMillis();
System.out.println("Cost time: "+ (endTime - startTime));//78
}
}