用筛法求之N内的素数。(Java)

解题思路:

  1. 申请一个数组,从1-N初始化

  2. 从第二个数开始,(2是素数),并且用循环把该数的倍数的数置为0

  3. 然后访问下一个不是1的数(一定为素数),重复上面一个步骤

  4. 在循环中把不是0的数输出

import java.util.*;

//用筛法求之N内的素数。
public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int N = scanner.nextInt();
		FindP(N);
	}
	
	public static void FindP(int num) {
		int[] nums = new int[num];
		//将num到1的值赋给数组
		for(int i = 1; i < num; i++) {
			nums[i] = i + 1;
		}
		
//		从第二个数开始,(2是素数),并且用循环把该数的倍数的数置为0
//		然后访问下一个不是0的数(一定为素数),重复上面一个步骤
		for(int i = 1; i < num; i++) {
			if(nums[i] != 0) {
				System.out.println(nums[i]);//输出这个非0的数(这一定是素数)
				//将该素数的倍数赋值为0
				for(int j = i+1; j< num; j++) {
					if(nums[j]%nums[i] == 0) {
						nums[j] = 0;
					}
				}
			}
		}
		
	}
}
  • 用筛法求素数大体思路:
    将某一范围内的正整数从小到大顺序排序,然后在所有数中选取最小的素数,比如为2时,然后去掉2的整数倍的数,取完之后,在选取剩下的最小的素数重复刚刚的步骤。依次类推,直到筛子为空时结束,剩下的这些数就是素数。
posted @ 2023-01-02 17:51  凉白茶  阅读(339)  评论(0编辑  收藏  举报