java100以内的质数_Java求100以内的质数的四种方法

质数:

又称素数,只能被1和它本身整除的数就是质数。

难点:

需要两层循环,外层循环99遍;

内层循环,控制除数为2到98(也就是2到被除数前面的一个数)。

为什么从2开始?因为所有数都能被1整除。

需要定义一个变量flag来记录某个数是不是质数

内层循环结束后需要重新把flag重置为true

方法一:

importorg.junit.Test;public classDemo {

@Testpublic voidprimeNumberTest() {boolean flag = true;for (int i = 2; i <= 100; i++) {for (int j = 2; j < i; j++) {if (i % j == 0) {//为什么要定义变量flag?//因为只能被1和它本身整除的才是质数,而如果if的判断条件为true//则这个数不是质数。因为进入if判断条件,意味着这个数能被2到i-1的某个数整除

flag = false;

}

}if(flag) {

System.out.print(i+",");

}//因为内层循环会把flag的值设置为false//如果没有下面的语句,flag的值在进入内层循环之后将永远为false

flag = true;

}

}

}

结果:

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,

方法二:

与方法一相比有所改进的地方,把flag放在外层与内层循环之间,这样就不用每次结束内层循环后去重置flag的值。

importorg.junit.Test;public classDemo {

@Testpublic voidprimeNumberTest() {for (int i = 2; i <= 100; i++) {//因为flag定义在外层循环与内层循环之间,所以每次开始外层循环时flag的值都是true//这样就不需要在内层循环结束时重置flag的值为true了

boolean flag = true;for (int j = 2; j < i; j++) {if (i % j == 0) {//为什么要定义变量flag?//因为只能被1和它本身整除的才是质数,而如果if的判断条件为true//则这个数不是质数。因为进入if判断条件,意味着这个数能被2到i-1的某个数整除

flag = false;

}

}if(flag) {

System.out.print(i+ ",");

}

}

}

}

结果

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,

方法三:

改进:在if判断语句后面加了break,因为只要有能被2到i-1当中的一个数整除,这个i就不是质数,就没有必要继续循环下去

importorg.junit.Test;public classDemo {

@Testpublic voidprimeNumberTest() {

System.out.println(start);for (int i = 2; i <= 10000; i++) {boolean flag = true;for (int j = 2; j

flag= false;break;//这是改进的地方,因为只要有能被2到i-1当中的一个数整除,这个i就不是质数,就没有必要继续循环下去

}

}if(flag) {

System.out.print(i+",");

}

}

}

}

方法四:

改进:把j的取值范围由

importorg.junit.Test;public classDemo {

@Testpublic voidprimeNumberTest() {for (int i = 2; i <= 100; i++) {boolean flag = true;for (int j = 2; j <= Math.sqrt(i); j++) {if (i % j == 0) {

flag= false;break;

}

}if(flag) {

System.out.print(i+ ",");

}

}

}

}

方法四的小改进:

加了一个count,去统计质数的个数

importorg.junit.Test;public classDemo {

@Testpublic voidprimeNumberTest() {int count=0;for (int i = 2; i <= 100; i++) {boolean flag = true;for (int j = 2; j <= Math.sqrt(i); j++) {if (i % j == 0) {

flag= false;break;

}

}if(flag) {

System.out.print(i+ ",");

count++;

}

}

System.out.print("质数个数为:"+count);

}

}

结果:

2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,质数个数为:25

后记:

2020年3月3日 09:45AM 星期二 农历2020年二月初十 上海 晴 温度:12°,比较冷。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值