篩選法求素數 java
阿新 • • 發佈:2019-01-09
思路:在一個boolean型別的陣列中 ,從第二個開始遍歷,將2的倍數置為false,3的倍數置為false。例項說明一下:
求0-10的素數,定義陣列boolean b[]=boolean[11];b[i]全部為false,從下標2~10(對應數字2~10)全部置為true,2是最小的素數,從2開始遍歷,如果當前元素為b[i]=true,將所有2的倍數的值都置為空,3也同樣。。。最好剩下的true的元素就是素數。
package Tecent; import java.util.Arrays; import java.util.Scanner; /* * 篩選法求素數 */ public class MainSogou2 { /* * from ~ to 是範圍 */ public static boolean[] printPrime(int from, int to) { /* * 定義一個boolean型別的陣列,長度為to+1; */ boolean[] isPrime = new boolean[to + 1]; isPrime[1] = false; isPrime[0] = false; Arrays.fill(isPrime, 2, to + 1, true); // 從2開始計算,因為2是最小的素數,如果按from開始計算,from=5,下一個就是5*6,這樣做會不能便利到所有的情況 for (int i = 2; i <= to; i++) if (isPrime[i]) /* * 求2-10,現將2的倍數置為false,再將3的倍數置為false */ for (int j = i; j * i <= to; j++) isPrime[j * i] = false; return isPrime; } public static int fun(int n, int from, int to) { // 個數 int count = 0; boolean[] isPrime = printPrime(from, to); for (int i = from; i <= to; i++) { if (isPrime[i] == true) System.out.print(i + " "); } return count; } public static void main(String[] args) { System.out.println(fun(10, 5, 20)); } }