篩選法查詢100以內的素數
阿新 • • 發佈:2018-11-04
解析:
篩選法:是指從小到大篩去一個已知素數的所有倍數。例如:根據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 + " "); } } } }