mysql 判斷質數 質數(素數)判斷演算法總結

2021-10-18 02:22:50 字數 1024 閱讀 1250

1.原始演算法

就是將質數的定義翻譯成**,就要看i是否能被小於它的sqrt( i )的數整除。

時間複雜度o(n*sqrt(n))  空間複雜度o(m) m為質數個數。

2.質數篩法

①定義bool is_prime[n+1],初始化為1(奇數為1,偶數為0)

②已經2為最小的質數,將2的倍數的布林值都設為false,如此類推。

要注意的是最好不要把求sqrt(n)放入迴圈體內。

③依據is_prime陣列輸出相應的質數。

時間複雜度近似o(n) 空間複雜度o(n)

#include #include

using namespacestd;bool* prime_sieve(intn) voidmain()

{intn;

cin>>n;bool *primes;

primes=prime_sieve(n);for(int i=2;i<=n;i++)

{if(primes[i])

cout<

cout<

質數相關數學知識:

1.高斯猜測,n以內的素數個數大約與n/ln(n)相當,或者說,當n很大時,兩者數量級相同。這就是著名的素數定理。

2.十七世紀費馬猜測,2的2^n次方+1,n=0,1,2…時是素數,這樣的數叫費馬素數,可惜當n=5時,2^32+1就不是素數,

至今也沒有找到第六個費馬素數。

3.18世紀發現的最大素數是2^31-1,19世紀發現的最大素數是2^127-1,20世紀末人類已知的最大素數是2^859433-1,用十進位制表示,這是乙個258715位的數字。

4.孿生素數猜想:差為2的素數有無窮多對。目前知道的最大的孿生素數是1159142985×2^2304-1和1159142985×2^2304+1。

5.歌德**猜想:大於2的所有偶數均是兩個素數的和,大於5的所有奇數均是三個素數之和。其中第二個猜想是第乙個的自然推論,因此歌德**猜想又被稱為1+1問題。我國數學家陳景潤證明了1+2,即所有大於2的偶數都是乙個素數和只有兩個素數因數的合數的和。國際上稱為陳氏定理。

演算法題 判斷素數 質數

判斷素數 埃拉託斯特尼篩法 這種方法的思想是設定乙個標誌陣列isprimes n 標誌陣列的每一位標示相應的數是不是素數,初始化為全true。演算法從i 2開始,依次將質數的倍數標記為非素數,即將標記陣列的相應位改為false。標記質數的倍數的時候從i i也就是i的平方開始標記,不需要從i j 且j...

判斷素數與產生素數表(質數)

素數在小學數學也叫質數 方法 所謂素數是指除了1和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被2 16的任一整數整除。因此判斷乙個整數m是否是素數,只需把m被2 m 1之間的每乙個整數去除,如果都不能被整除,那麼m就是乙個素數。另外判斷方法還可以簡化。m不必唄2 m 1之間的每...

判斷質數與篩質數

一 判定質數 要判斷乙個數是不是質數,只需遍歷小於等於它的所有數,如果它能被除了1和本身之外的數整除,那麼它就不是質數。很簡單,暴力列舉,如下 1 bool is prime intx 2 但是還可以優化,對於乙個數 x 它有乙個約數 d 那麼 frac 也是 x 的約數,所以我們只需要列舉較小的乙...