『壹』 Java 求大神用Eclipse編寫篩法求素數的具體代碼
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n=input.nextInt(); //輸入要判斷的多大值
find(n); //調用方法返回結果
}
public static void find(int n){
boolean[] res=new boolean[n+1];
for(int i=0;i<res.length;i++){
res[i]=true;
}
for(int i=2;i<=n/i;i++){ //從2 3 4 5開始
if(res[i]){ //如果i這個位置是true說明是素數
for (int j=i;j<=n/i;j++) { //從i的1倍 2倍 3倍開始
res[i*j]=false;
}
}
}
for(int i=2;i<res.length;i++){
if(res[i]){
System.out.print(i+" "); //輸出素數
}
}
}
}
『貳』 生成素數表的演算法有哪些
篩選法求素數表,最快的素數表生成演算法。
所謂「篩選法」指的是「埃拉托色尼(Eratosthenes)篩法」。他是古希臘的著名數學家。他採取的方法是,在一張紙上寫上1到100全部整數,然後逐個判斷它們是否是素數,找出一個非素數,就把它挖掉,最後剩下的就是素數。
具體做法如下:
<1>
先將1挖掉(因為1不是素數)。
<2>
用2去除它後面的各個數,把能被2整除的數挖掉,即把2的倍數挖掉。
<3>
用3去除它後面的各數,把3的倍數挖掉。
<4>
分別用4、5…各數作為除數去除這些數以後的各數。這個過程一直進行到在除數後面的數已全被挖掉為止。例如找1~50的素數,要一直進行到除數為47為止(事實上,可以簡化,如果需要找1~n范圍內素數表,只需進行到除數為n^2(根號n),取其整數即可。例如對1~50,只需進行到將50^2作為除數即可。)
如上演算法可表示為:
<1>
挖去1;
<2>
用剛才被挖去的數的下一個數p去除p後面各數,把p的倍數挖掉;
<3>
檢查p是否小於n^2的整數部分(如果n=1000,
則檢查p<31?),如果是,則返回(2)繼續執行,否則就結束;
<4>
紙上剩下的數就是素數。
參考鏈接:http://blog.chinaunix.net/uid-9078996-id-2010292.html