大家好,我是Ziph!
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
import java.util.Scanner;
/**
* @author Ziph
* @date 2020年2月23日
* @Email [email protected]
*
* 筛选法求质数:输入一个整数n,求小于这个整数的所有质数
* 算法:定义一个长度为n的boolean数组,true表示是质数,false表示不是质数。
* 初始均为true。之后从2开始循环:
* 1.找到第一个值为true的下标i
* 2.把所有下标为i的倍数的值置为false
* 3.直到扫描完数组中的所有数值
* 4.最后遍历数组,如果下标i的值为true,则说明i为质数
*/
public class TestPrime {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个整数:");
int n = sc.nextInt();
//定义boolean数组,数组默认值为false
boolean[] nums = new boolean[n];
//将数组中所有元素初始化为true
for (int i = 2; i < nums.length; i++) {
nums[i] = true;
}
for (int i = 2; i < nums.length; i++) {//i表示满足倍数条件的除数
//j+1是因为需要从i的下一个值开始判断满足倍数的条件
for (int j = i + 1; j < nums.length; j++) {
//条件判断
if (j % i == 0) {
//j是i的倍数,赋值false
nums[j] = false;
}
}
}
//打印n以内的所有质数
print(nums);
}
//遍历数组元素
public static void print(boolean[] nums) {
for (int i = 2; i < nums.length; i++) {
//数组元素为true的是质数,并打印输出
if (nums[i] == true) {
System.out.print(i + " ");
}
}
}
}
执行效果: