判断输出质素(素数)的程序及其优化

注释中有详解: 

/*
100以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。最小的质数是:2
*/
class PrimeNumberTest {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){ //如果i被j除尽,则i可以被非1和它本身的数除尽,所以不为质数isFlag = false;//这个i不为素数的标志}}//if(isFlag == true){//isFlag == true则所对应的i为质数,输出System.out.println(i);}//重置isFlagisFlag = true;}}
}

优化后的:

/*
1000以内的所有质数的输出。实现方式一
质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。对PrimeNumberTest.java文件中质数输出问题的优化
*/
class PrimeNumber {public static void main(String[] args) {boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值int count = 0;//记录质数的个数for(int i = 2;i <= 1000;i++){//遍历1000以内的自然数//优化二://for(int j = 2;j < i;j++){//优化前for(int j = 2;j <= Math.sqrt(i);j++){//(优化后)j:被i去除//Math.sqrt(i)是指根号i的值,j <= Math.sqrt(i)与j < i效果一致但效//率更高运算次数更少,具体原因不做多讲解,可b站找个视频,打字讲解太麻烦了if(i % j == 0){ //i被j除尽isFlag = false;break;//优化一:一旦发现i可以被非1和它本身的数整除,说明其为非质素,用break//跳出内循环,执行下一轮}}//if(isFlag == true){//System.out.println(i);count++;}//重置isFlagisFlag = true;}System.out.println("质数的个数为:" + count);}
}

方法二:

/*
100000以内的所有质数的输出。实现方式二
质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。对PrimeNumberTest.java文件中质数输出问题的优化
*/
class PrimeNumberTest2 {public static void main(String[] args) {int count = 0;//记录质数的个数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++;}System.out.println("质数的个数为:" + count);}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部