解題思路: 申請一個數組,從1-N初始化 從第二個數開始,(2是素數),並且用迴圈把該數的倍數的數置為0 然後訪問下一個不是1的數(一定為素數),重覆上面一個步驟 在迴圈中把不是0的數輸出 import java.util.*; //用篩法求之N內的素數。 public class Main { p ...
解題思路:
-
申請一個數組,從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的整數倍的數,取完之後,在選取剩下的最小的素數重覆剛剛的步驟。依次類推,直到篩子為空時結束,剩下的這些數就是素數。