标题输出质数的多种方法
1.普通方法(运行时间慢)
public class PrimeNumberTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 2; i < 100000; i++) { //遍历100以内的自然数
boolean isFlag = true;
for (int j = 2; j < i; j++) { //j被i去除
if(i % j == 0) { //i被j除尽
isFlag = false;
break; //为了让非质数快速退出循环(一旦i发现有一个j被除尽,则可以判断为非质数),该语句只对非质数有用
}
}
if(isFlag == true) {
System.out.println(i);
}
}
}
}
2.两种方法优化后
public class PrimeNumberTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 2; i < 100000; i++) { //遍历100以内的自然数
boolean isFlag = true;
for (int j = 2; j < Math.sqrt(i); j++) { //j被i去除 优化二:对本身是质数的自然数是有效的
//Math.sqrt(i)为对i开方,既选取了小于i并能和i整除的数
if(i % j == 0) { //i被j除尽
isFlag = false;
break; //优化二:为了让非质数快速退出循环(一旦i发现有一个j被除尽,则可以判断为非质数),
//该语句只对非质数有用
}
}
if(isFlag == true) {
System.out.println(i);
}
}
}
}
3.两种方法优化后加上,使用continue语句(最佳方法)
public class con_PrimeNumber {
public static void main(String[] args) {
int count = 0;
System.out.println("100以内的所有质数如下:");
label: for (int i = 2; i < 100; i++) { //遍历100以内的自然数
for (int j = 2; j < Math.sqrt(i); j++) { //j被i去除 优化二:对本身是质数的自然数是有效的
//Math.sqrt(i)为对i开方,既选取了小于i并能和i整除的数
if(i % j == 0) { //i被j除尽
continue label; //跳过当前这个数的循环
}
}
//能执行到这里的数,说明这个i没有被任何一个j 除尽
count++;
System.out.println(i);
}
System.out.println("质数的个数为:"+count);
}
}