求前K個素數的幾種方法

2021-08-25 11:09:46 字數 1067 閱讀 6631

現在有乙個問題,輸入k,求前k個素數或者說求第k個素數。常規的想法,就是從0開始往後遍歷,是素數就存起來,直到找到第k個。

我們這裡介紹三種篩選素數的方法:埃式篩法、線性篩法、6倍數判別法。

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

ll m, n;

bool prime[10000000 + 10];

void init()

return;

}int main()

return

0;}

埃式篩法預設所有數都是素數,0和1不是素數,從2開始,把2的整數倍數都賦值為不是素數,直到我們規定的範圍。這樣掃一圈可以篩出素數和合數,時間複雜度o(nlognlogn),空間複雜度o(n)。

//#include

#include

using

namespace

std;

typedef

long

long ll;

ll m, n, su[10000000 + 10];

bool isprime[10000000 + 10];

void init()

}}int main()

return

0;}

線性篩法和埃式篩法比較相像,也是初始化所有數都是素數,0和1不是素數。從2開始,是素數就儲存,不管是不是都篩掉小於等於i的素數和i的乘積。

#include

#include

#include

#include

using

namespace

std;

int n,m;

bool su(int a)

return1;}

int main()

return

0;}

求素數的幾種方法

素數,也稱為質數,其只能被1或者自身整除的自然數 不包括1 換而言之,只有兩個正因數的自然數稱為素數。與之相對的比1大但不是素數的自然數稱為合數。1和0既不是素數也不是合數,合數由若干個質數相乘得到。顯然根據定義就能判斷乙個數n是否為素數,具體的,對其從2到sqrt n 進行除法,判斷是否存在餘數為...

Java求素數(質數)的幾種方法

比1大的整數中,除了1和它本身以外,不再有別的因數,這種整數叫做質數或素數 要判斷x是否為質數,就從2一直嘗試到x 1的做法效率是最差的!其實只要從2一直嘗試到 x,就可以了。因為因數都是成對出現的。比如,100的因數有 1和100,2和50,4和25,5和20,10和10。看出來沒有?成對的因數,...

求素數的幾種方法(暴搜法和篩選素數法)

參考自該篇部落格 參考自該篇部落格 其分為兩種,一種是直接for迴圈,另一種是建立在數學思想上的平方根迴圈。第二種演算法時間複雜度明顯優於第一種。也就是最簡單直接的for迴圈,判定這個數是否能被除1 和其本身以外的整數整除。這個也是基於for迴圈的一種方式,比上面那種方法稍微快了一點。當n的數值較大...