质数(素数):大于 1 的正整数只能被 1 和 他本身 整除
从 2 开始,到这个数 -1 为止,都不能被这个数本身整除的自然数
最小的素数是: 2
【例题】 求 1 ~ 100 之间的质数
思路
定义一个布尔型的变量,用来标识 是否被j 除尽,除尽标识为false ,说明不是质数
双层循环
外循环 遍历 1 ~ 100之间的自然数
内循环 i 去 除的数
对质数的优化:
Math.sqrt(i) i 开平方 例: 80 = 20 * 40 ,80 可以被 20 除尽,一定可以被 40 除尽
所以就可以只除前面的数,随着左面的数越来越大,除出来的数越来越小,临边点是除与这个数等于这个数的本身
,这个数就是这个数的平方,极限值就是到开方。
对非质数的优化:
一旦 i 发现有一个j 被除尽了,后面的j就不在算了 ,
比如 这道题是 2 ~ 100,如果这个数被2 除尽了 就说明他不是质数,
后面也就不用在算了
public class ZhiShuTest {
public static void main(String[] args) {
int count =0;//计算质数的个数
boolean isflag = true;//标识i是否被j除尽,一旦除尽,修改值
for(int i =2;i < 100 ;i++) {//外层循环遍历 1 ~ 100之间的自然数
for(int j=2;j <= Math.sqrt(i);j++ ) {// i 去 除的数 Math.sqrt(i) 对质数的优化
if( i % j == 0) {// i被 j 除尽 说明是非质数
isflag = false;
break;//对非质数的优化
}
}
if(isflag == true) {
System.out.println(i);//输出质数
count++;
}
isflag = true;//重置
}
System.out.println("质数的个数:"+count);
}
}
【例题】
从键盘输入两个数,为 上 下限,然后10个一行输出上下限间的所有质数
public class TestSix {
public static void main(String[] args) {
boolean isflag = true;
int count =0;//质数的个数
int number=0;
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个数:");
int a = scan.nextInt();
System.out.println("请输入第二个数:");
int b= scan.nextInt();
for(int i = a; i < b;i++) {//遍历区间的自然数
for(int j=2; j<=Math.sqrt(i);j++ ) {
if(i % j == 0) {
isflag = false;
}
}
if(isflag == true) {
System.out.print(i+" ");
number ++;
if(number % 10 == 0) {
System.out.println(" ");
}
count++;
}
isflag = true;
}
System.out.println();
System.out.println("质数的个数为:"+count);
}
}
输出:
请输入第一个数:
2
请输入第二个数:
100
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