思路
质数:只能被1和它本身整除的数
输入的数a
遍历一遍数2到a-1,如果都不能被数a整除,那么这个数为质数
优化:如果有一个数能被a整除,那么这个数就不是质数,不用再判断接下来的数能否整除
代码及解析
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class HomeWork02 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt();
System.out.println(a);
boolean isFlag = true; //判断是否为质数
for(int i = 2; i < a; i++){ //遍历2-a-1的数,看看能否整除
if(a%i == 0){
isFlag = false; //非质数
break; //优化:如果有一个能够整除,则数a非质数,break终止for循环
}
}
if(isFlag){
System.out.println("true");
}else{
System.out.println("false");
}
}
}
}
拓展:输出从m到n范围内所有的质数
1、从0/1/2到n范围的质数的输出
思路:需要两个for循环
第一个for循环用来遍历数a
第二个循环遍历2到a-1判断数a是否为质数
判断数a是否为质数后,重置isFlag用以判断下一个数a+1是否为质数
优化二:对于质数的来说,如果一个数a能够整除2到√a范围内的所有数,那么数a为质数
2、从m到n范围的质数的输出
修改i的初值即可
代码及解析 以输出100以内的质数为例
public class HomeWork02 { public static void main(String[] args) { boolean isFlag = true; //判断是否为质数 for (int i = 2; i < 100; i++) { for (int j = 2; j <= Math.sqrt(i); j++) { //优化二 if (i % j == 0) { isFlag = false; //非质数 break; //优化:如果有一个能够整除,则数a非质数,break终止for循环 } isFlag = true; //isFlag的重置,用以判断下一个数是否为质数 } if (isFlag) { System.out.print(i + " "); } } } }