筛选法求质数:输入一个整数n,求小于这个整数的所有质数(定义一个长度为n的boolean数组,true表示是质数,false表示不是质数)

大家好,我是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 + " ");
			}
		}
	}
}

执行效果:

在这里插入图片描述

发布了62 篇原创文章 · 获赞 113 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44170221/article/details/104460372