求N以內素數個數 粗暴方式及篩選法

2021-07-16 13:41:45 字數 940 閱讀 9121

素數,是除了1和它本身之外不再被其他的除數整除。

使用程式求n以內素數個數問題,在各種語言的基礎教程中都會講到。

一般而言,求取素數可以使用粗暴的從2開始遍歷到自己,每次拿自己整除這些遍歷的數,若可以整除,則不是素數並跳出迴圈。若遍歷到自己都不能被整除,則是素數。

這種方法雖然簡單,但是效率十分低下。有興趣的可以測試一下程式,當n》=100000時,程式便會非常的慢了。

另外一種比較高效的方法是篩選法,它的具體思路是:

先把n個自然數按次序排列起來。1不是質數,也不是合數,要划去。

第二個數2是質數留下來,而把2後面所有能被2整除的數都劃去。

2後面第乙個沒劃去的數是3,把3留下,再把3後面所有能被3整除的數都劃去。

3後面第乙個沒劃去的數是5,把5留下,再把5後面所有能被5整除的數都劃去。

這樣一直做下去,就會把不超過n的全部合數都篩掉,留下的就是不超過n的全部質數。

這種做法的效率與上面粗暴方式相比,高了不止乙個數量級。

public static void main(string args) 

public static int screenprimenumber(int number)

temp.set(1, 0);

for(int i = 2;i < math.sqrt(double.valueof(number));i++)}}

} int sum = 0;

for(int i = 0;i < temp.size();i++)

} return sum; }

public static int primenumber(int number)

}if(flag == true)

} return count;

}

篩選法求n以內素數(質數)

設定乙個標誌陣列isprime,isprime i 的值是1就表示i是素數。開始陣列元素值全部為1劃掉k的倍數,就是把isprime 2 k isprime 3 k 置成0最後檢查isprime陣列,輸出isprime i 為1的那些i include include using namespace...

使用篩選法求N以內的素數

1.使用篩選法求素數的思想是 使用乙個bool isprime n 來儲存乙個數是不是素數的標誌位。首先偶數不是素數 2除外 將2的倍數isprime全部設定為false。i從3開始遍歷,如果i為素數,則將i的倍數isprime全部設定成false。這樣就篩選掉了好多不是素數的數。從0遍歷ispri...

篩法 求n以內質數個數

判斷n是否為素數 續篩法部分 區間篩法 若乙個數可以進行因數分解,則得到的兩個數一定是有乙個 x sqrt x x 另乙個 x sqrt x x 任何乙個數都可以拆分為若干個質因數的乘積,如6 2 3,7 1 7 複雜度o nn sqrt n n include using namespace st...