案例二:找素数
-
需求:
- 判断 101-200 之间有多少个素数,并输出所有素数。
-
分析:
-
素数又叫质数:是除了 1 和 它本身 之外,不能被其它正整数整除。
-
举例寻找思路:
7 = 1*7 // 素数 8 = 1*8, 2*4 // 不是素数,是合数 9 = 1*9, 3*3 // 不是素数,是合数 1 和 0 // 既不是素数,也不是合数
-
-
实现:
1. 定义一个判断素数的方法isPrimeNumber,设置两个形参:int startNumber, int endNumber ——>用于分别接收开始数和结束数
2. 定义一个for循环,找到开始数到结束数之间的全部数
3. 立一个flag——>信号位:标记,假设一开始就认为遍历出的这个数是素数
4. 为了验证这个flag,判断该数到底是不是素数,规则是:从2开始遍历到该数的一半的数,看是否有数可以整除它,有则不是素数,没有则是素数
5. 循环验证结束后,发现没有数可以整除它,是素数并输出
6. 调用方法,传递一个开始数和一个结束数给形参:startNumber, endNumber
package com.app.demo;
/**
案例二:找素数
- 需求:
- 判断 101-200 之间有多少个素数,并输出所有素数。
- 分析:
- 素数又叫质数:是除了 1 和 它本身 之外,不能被其它正整数整除。
- 举例寻找思路:
7 = 1*7 // 素数
8 = 1*8, 2*4 // 不是素数,是合数
9 = 1*9, 3*3 // 不是素数,是合数
1 和 0 // 既不是素数,也不是合数
*/
public class Test2 {
// 1. 定义一个判断素数的方法isPrimeNumber,设置两个形参:int startNumber, int endNumber ——>用于分别接收开始数和结束数
public static void isPrimeNumber(int startNumber, int endNumber) {
System.out.print(startNumber + "~" + endNumber + "之间的全部素数: ");
// 2.定义一个for循环,找到开始数到结束数之间的全部数
for (int i = startNumber; i <= endNumber; i++) {
// i = 101 102 103 ... 199 200
// 3. 立一个flag——>信号位:标记,假设一开始就认为遍历出的这个数是素数
boolean flag = true;
// 4. 为了验证这个flag,判断该数到底是不是素数,
for (int j = 2; j < i / 2; j++) { // 规则:从2开始遍历到该数的一半的数,
if (i % j == 0) { // 看是否有数可以整除它,有则不是素数,没有则是素数
flag = false; // 发现有数可以整除它,表示不是素数
break; // 跳出并结束当前for循环
}
}
// 5. 循环验证结束后,发现没有数可以整除它,是素数并输出
if (flag) {
System.out.print(i + "\t");
}
}
}
public static void main(String[] args) {
// 6. 调用方法,传递一个开始数和一个结束数给形参:startNumber, endNumber
isPrimeNumber(101, 200);
}
}
输出结果:
101~200之间的全部素数: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199