用筛法求之N内的素数。(Java)
解题思路:
-
申请一个数组,从1-N初始化
-
从第二个数开始,(2是素数),并且用循环把该数的倍数的数置为0
-
然后访问下一个不是1的数(一定为素数),重复上面一个步骤
-
在循环中把不是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的整数倍的数,取完之后,在选取剩下的最小的素数重复刚刚的步骤。依次类推,直到筛子为空时结束,剩下的这些数就是素数。