输出质数个数
方法一:设置flag
/*
100以内所有质数的输出
质数也叫素数,只能被1和自身整除的自然数。————> 从2开始到这个数-1为止,都不能被这个数整除。
最小的质数为2
*/
public class PrimeNumberTest {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
for(int i = 2; i<= 100000; i++){//遍历100以内的自热数
boolean isFlag = true;
for(int j = 2; j< i; j++){//i除以j
if(i%j == 0){//i被j除尽
isFlag = false;
}
}
if(isFlag == true){
System.out.println(i);
}
}
long end = System.currentTimeMillis();
System.out.println("计算花费时间:" + (end- begin) + "ms");
}
}
方法二(改进之——Math.sqrt(i)使用flag
众所周知,假如a=b*c 那么被b整除和被c 整除没啥区别,比如96/2=48,所以在96范围内可以少计算一次,以此类推,只需要遍历[2, i \sqrt{i} i]能否整除即可
public class PrimeTest2 {
public static void main(String[] args) {
long begin = System.currentTimeMillis();
int count = 0;
boolean isFlag = true;
for(int i = 2; i<= 100000; i++){//遍历100以内的自热数
for(int j = 2; j<= Math.sqrt(i); j++){//i除以j
if(i%j == 0){//i被j除尽
isFlag = false;
break;//只对本身非质数的数有优化作用
}
}
if(isFlag == true){
// System.out.println(i);
count++;
}
//重置flag
isFlag = true ;
}
long end = System.currentTimeMillis();
System.out.println("质数个数为:" + count + "个");
System.out.println("计算花费时间:" + (end- begin) + "ms");
}
}
方法三(再改进之——使用continue label
public class PrimeNumberTest3 {
public static void main(String[] args) {
long start = System.currentTimeMillis();//用于计算时间
int count = 0;
label:for(int i=2; i<=100000; i++){
for(int j= 2; j<= Math.sqrt(i); j++){
if(i%j == 0){
continue label ;//注意label 标签的使用
}
}
count++;
}
long end = System.currentTimeMillis();
System.out.println("时间为"+ (end - start));
System.out.println("质数的个数为"+ count);
}
}