1. 程式人生 > >篩選法求素數 java

篩選法求素數 java

思路:在一個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));
	}
}