质数(素数):一个大于1的自然数,除了1和它本身外,不能被其他自然数整除的数就叫做质数。
最小的质数是 2。
规律:从 2 开始,到这个数 减 1 结束为止
1.方式一:最普通的做法
/*
实现方式一
*/
class PrimeNumberTest1 {
public static void main(String[] args) {
// 标记,用来标识其是否是质数
boolean flag = true;
//遍历 100 以内的自然数
for(int i = 2; i <= 100; i++ ){
for(int j = 2; j <= i - 1; j++ ){
// 判断是否可以被自然数整除
if (i % j == 0){
// 不是质数
flag = false;
}
}
// 如果标记还为true,说明其是质数
if (flag){
System.out.println(i + "是质数");
}
// 切记:要将重置标记,如果不重置标记,标记一直为false,即使是质数,也无法走到
// flag == true 的if语句
flag = true;
}
}
}
2.方式二:使用break关键字,结束内循环。对于本身不是质数的自然数有效果。
/*
实现方式二:使用break关键字,对于本身不是质数的自然数有效果
*/
class PrimeNumberTest2{
public static void main(String[] args) {
boolean flag = true;
for(int i = 2; i <= 100; i++ ){
for (int j = 2; j <= i - 1; j++ ){
if (i % j == 0){
flag = false;
// 优化方式:加上break语句
break;
// i == 4 时--> 4 % 2 == 0--> flag = false、执行break语句结束整个内循环,不再执行 4 % 3 == 0.
}
}
if (flag){
System.out.println(i + "是质数");
}
flag = true;
}
}
}
3.方式三:使用开根号的方法:Math.sqrt(参数).根据临界值,减少查询次数。
/*
方式三:调用开根号的方法:Math.sqrt(参数)。
根据临界值,减少查找次数。
对本身是质数的自然数有效果。
*/
class PrimeNumberTest3 {
public static void main(String[] args) {
boolean flag = true;
for(int i = 2; i <= 100; i++){
for(int j = 2; j <=Math.sqrt(i); j++){
if (i % j == 0){
flag = false;
}
}
if (flag){
System.out.println(i + "是质数");
}
flag = true;
}
}
}
4.方式四:使用带有标签的continue关键字。
/*
方式四:使用带有标签的continue
*/
class PrimeNumberTest4 {
public static void main(String[] args) {
A:for (int i = 2; i <= 100; i++ ){
for (int j = 2; j <= Math.sqrt(i);j++){
if (i % j == 0){
continue A;
}
}
System.out.println(i + "是质数");
}
}
}