1. 程式人生 > >篩選法查詢100以內的素數

篩選法查詢100以內的素數

解析:

篩選法:是指從小到大篩去一個已知素數的所有倍數。例如:根據2,我們篩選去4,6,8,....,98,100等數,然後根據3,我們可以篩選9,15,...99等數(注意此時6、12等數早就被篩去了),由於4被篩去了,下一個用於篩選的素數是5,以此類推,最後剩餘的就是100以內的素數。

首先定義一個int型別的陣列int[] a,初始化整個陣列,全部初始化為1,第二步雙重迴圈,從2開始,所有2的倍數都標記為0,所有3的倍數也標記為0;然後 是 4,但因為4已經被標記為0了,跳過;接著是5,直到所有的數都迴圈過一遍。

答案:

package book;

/**
 * 利用篩選法查詢100以內的素數
 */
public class JiOu {
	public static void main(String[] args) {
		int[] a = new int[101];
		int i, j;
		for (i = 1; i < 101; i++) {
			a[i] = 1; // 作為標記,1為素數,0為非素數
		}
		for (i = 2; i < 101; i++) {
			if (a[i] != 0) // a[i]為素數
			{
				for (j = i + i; j < 101;) {
					if (j % i == 0) {
						a[j] = 0; // 將該素數的倍數標記為0
					}
					j = j + i;
				}
			}
		}
		for (i = 2; i < 101; i++)
			if (a[i] != 0) // 所有不為0的都是素數
				System.out.print(i+"  ");

	}

}

執行結果:

 

擴充套件:

當然求素數的方法也有很多種,下面用開根號的辦法解答:

package book;

public class JiOu {

	public static void main(String[] args) {
		int i, j, k;
		for (i = 2; i < 100; i++) {
			k = (int) Math.sqrt(i);
			for (j = 2; j <= k; j++) {

				if (i % j == 0)
					break;

			}
			if (j > k) {
				System.out.print(i + " ");
			}
		}
	}
}