如何高效尋找素數

2021-10-03 23:36:16 字數 841 閱讀 1875

如果⼀個數如果只能被 1 和它本⾝整除,那麼這個數就是素數。

//返回區間[2,n)中,素數的個數

int countprimes(int n)

時間複雜度o(n^2)

int

countprimes

(int n)

}//判斷整數n是否是素數

boolean isprime

(int n)

return

true

;}

找其他整除因子時,i不用遍歷到n,到sqrt(n)即可

使用標記陣列: 素數的整數倍 都不可能是素數了。例如22=4,23=6, 2*4=8都不是素數

for

(int i=

2; i<

sqrt

(n);i++

)}

去除冗餘:n=25,判斷到4時會標記 42,43等,但是這些數字已經被 i=2和i=3的 24,34標記過了。所以讓j從i的平方開始遍歷,而不是2*i開始

int

countprimes

(int n)}}

int count=0;

for(

int i=

2;i)return count;

}

該演算法的時間複雜度⽐較難算,顯然時間跟這兩個巢狀的 for 迴圈有關,其運算元應該是:

n/2 + n/3 + n/5 + n/7 + … = n × (1/2 + 1/3 + 1/5 + 1/7…)括號中是素數的倒數。其最終結果是o(n * loglogn)

如何高效尋找素數

素數的定義看起來很簡單,如果乙個數如果只能被 1 和它本身整除,那麼這個數就是素數。返回區間 2,n 中有幾個素數 int countprimes int n 比如 countprimes 10 返回 4 因為 2,3,5,7 是素數 int countprimes int n 判斷整數 n 是否是...

尋找素數對

哥德 猜想大家都知道一點吧.我們現在不是想證明這個結論,而是想在程式語言內部能夠表示的數集中,任意取出乙個偶數,來尋找兩個素數,使得其和等於該偶數.做好了這件實事,就能說明這個猜想是成立的.由於可以有不同的素數對來表示同乙個偶數,所以專門要求所尋找的素數對是兩個值最相近的.input 輸入中是一些偶...

尋找素數對

哥德 猜想大家都知道一點吧.我們現在不是想證明這個結論,而是想在程式語言內部能夠表示的數集中,任意取出乙個偶數,來尋找兩個素數,使得其和等於該偶數.做好了這件實事,就能說明這個猜想是成立的.由於可以有不同的素數對來表示同乙個偶數,所以專門要求所尋找的素數對是兩個值最相近的.輸入中是一些偶整數m 5對...