第一種:直接暴力,在這就不說了
第二種:埃氏篩法(能處理1e6以下的資料)
首先,將2到n範圍內的所有整數寫下來。其中最小的素數為2,將表中所有2的倍數都劃去。表中剩餘的最小數字是3,不能被更小的數整除,所以也是素數,將表中所有3的倍數也劃去。。。 依此類推,如果表中剩餘的最小數字為m時,m就是素數,再將m的所有倍數劃去。
**如下:
int prime[100007], s = 0;
bool is_prime[1000007];
void init()
}}
第三種:區間篩選(能處理類似[a,b)區間中的素數,[a,b)區間:a
乙個數x的最小素因數一定不超過x^(1/2),那麼有x^(1/2)以內的素數表,那麼就可以運用埃氏篩法篩選[a,b)中的素數了;
memset(is_prime,true,sizeof(is_prime));
for(int i=0; (__int64)prime[i]*prime[i]
質數篩選 素數篩選法
int prime 100010 void prime for int i 1 i i 1000000 i define size 1000000 int main 元素值為0代表是素數 int prime size int pos 0 int flag for int i 2 i size i p...
素數篩選法
篩選素數法 搞acm的都知道,素數是數論中必不可少的知識,也是必須要掌握的,關於素數的篩選有好幾種方法,下面一一道來,寫的不好還請提出。第一種是最常規的做法 int main if j sqrt i cout 這種方法肯定是比第一種快的,至於快多少大家可以比較一下,注意到裡面的for迴圈是到sqrt...
素數線性篩選
include include includeusing namespace std bool isprime 10000001 int pri 2000001 prin int findprime int maxn for int j 0 jmaxn break 當過大了就跳出 isprime i...