输出100内所有质数
质数:素数,只能被1和他本身整除的自然数。
方法一
class Test {
public static void main(String[] args) {
boolean isFlag = true;//标识i是否被j除尽,一旦除尽,重新定义其值
for(int i = 2;i <= 100;i++){//遍历100以内的自然数
for(int j = 2;j < i;j++){//j:被i除去
if(i % j == 0){
isFlag = false;
}
}
if(isFlag == true){
System.out.println(i);
}
//对isFlag重置
isFlag = true;
}
}
}
对方法一进行优化
class Test {
public static void main(String[] args) {
boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值
int count = 0;//记录质数的个数
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long start = System.currentTimeMillis();
for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
//优化二:对本身是质数的自然数是有效的。
//原先的for(int j = 2;j < i;j++){//j:被i去除
//优化后
for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除,调用math中的一个2方法。
if(i % j == 0){ //i被j除尽
isFlag = false;
break;//优化一:只对本身非质数的自然数是有效的。
}
}
//
if(isFlag == true){
//System.out.println(i);
count++;
}
//重置isFlag
isFlag = true;
}
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long end = System.currentTimeMillis();
System.out.println("质数的个数为:" + count);
System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13
}
}
方法二
class Test {
public static void main(String[] args) {
for(int i = 2;i <= 100;i++){//遍历100以内数
boolean isFlag = true;//标识i是否被j除尽,一旦除尽,重新定义其值
for(int j = 2;j < i;j++){//j:被i除去
if(i % j == 0){
isFlag = false;
}
}
if(isFlag == true){
System.out.println(i);
}
}
}
}
方法三(直接在方法一优化的基础上修改)
class Test {
public static void main(String[] args) {
int count = 0;//记录质数的个数
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long start = System.currentTimeMillis();
label:for(int i = 2;i <= 100000;i++){//遍历100000以内的自然数
for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除,调用math中的一个方法,开根号。
if(i % j == 0){ //i被j除尽
continue label;//如果发现直接被除尽,重新回到label,
}
}
//能执行到此步骤的都是质数
count++;
}
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long end = System.currentTimeMillis();
System.out.println("质数的个数为:" + count);
System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13
}
}