数输出的实现方式一
package work.com.cn.entity; /* 100以内的所有质数的输出。 质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。 最小的质数是:2 */ public class PrimeNumberTest { public static void main(String[] args) { boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值 isFlag 可以放在里边就不用重置 for(int i = 2;i<100; i++){ // boolean isFlag = true; for(int j =2;j<i;j++){ if(i % j ==0){ isFlag = false; } } if(isFlag == true){ System.out.println(i); } //重置isFlag isFlag = true; } } }
质数输出的算法优化一
/* 100000以内的所有质数的输出。实现方式一 质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。 对PrimeNumberTest.java文件中质数输出问题的优化 */ class PrimeNumberTest1 { 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++){ for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除 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 } }
质数输出的算法优化二
/*
100000以内的所有质数的输出。实现方式二
质数:素数,只能被1和它本身整除的自然数。–>从2开始,到这个数-1结束为止,都不能被这个数本身整除。对PrimeNumberTest.java文件中质数输出问题的优化
*/
class PrimeNumberTest2 {
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去除 if(i % j == 0){ //i被j除尽 continue 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
}
}
break和continue的基本使用
/* break和continue关键字的使用 使用范围 循环中使用的作用(不同点) 相同点 break: switch-case 循环结构中 结束当前循环 关键字后面不能声明执行语句 continue: 循环结构中 结束当次循环 关键字后面不能声明执行语句 */ class BreakContinueTest { public static void main(String[] args) { for(int i = 1;i <= 10;i++){ if(i % 4 == 0){ break;//123 //continue;//123567910 //System.out.println("今晚迪丽热巴要约我!!!"); } System.out.print(i); } System.out.println("\n"); //****************************** label:for(int i = 1;i <= 4;i++){ for(int j = 1;j <= 10;j++){ if(j % 4 == 0){ //break;//默认跳出包裹此关键字最近的一层循环。 //continue; //break label;//结束指定标识的一层循环结构 continue label;//结束指定标识的一层循环结构当次循环 } System.out.print(j); } System.out.println(); } } }
质数输出的实现方式二
/* 100000以内的所有质数的输出。实现方式二 质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。 对PrimeNumberTest.java文件中质数输出问题的优化 */ class PrimeNumberTest2 { 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去除 if(i % j == 0){ //i被j除尽 continue 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 } }