NowCoder猜想(素數篩法 位壓縮)

2022-03-12 23:21:27 字數 1090 閱讀 2716

在期末被各科的大作業碾壓快要窒息之際,百忙之中抽空上牛客網逛了逛,無意中發現一道好題,nowcoder猜想,題意很明顯,就是個簡單的素數篩法,但竟然超記憶體了,我暈(+﹏+)~  明明有 3 萬多 k 的空間限制……於是我不打表,試了試最暴力的做法,赤裸裸的做法果然超時了,無奈,只好對素數篩法進行位壓縮了,這是我目前所能想到的方法了,第一次用上這樣的特技,還是調了好一會(位陣列裡不能用 bool 來定義,具體的話好像 bool 和 int 之類的整型稍有不同;也不能用 int,因其最高位是正負標誌位,所以只好用 unsigned int了,同樣的原理,用 unsigned char, unsigned short, unsigned long long 等無符號整型都可以),貼個**先,注釋的為純暴力:

1 #include2 #include3 #include4 #include5

using

namespace

std;

6 typedef long

long

ll;7

const

int inf = 0x3fffffff;8

const

int n =1e7;910

class

bitarray

14bool rid(const

int &x) const

17void wid(const

int &x, const

int &v)

20};

2122

int pri[700005

];23

int init_pri(int n =n)

31return

c;32}33

34/*

35inline bool isprime(const int &x)

4243

inline int num(const int &n)

49*/

5051

intmain()

59return0;

60 }

view code

提交後發現無論是哪種做法,後台的記憶體計算都和我自己手算的差很遠,不知它是怎麼計算的。。。

素數篩法(素數篩 線性篩)

求素數的方法在現階段可以總結為三種 這種方法最為簡單但效率太低,經過優化時間複雜度最低是o n sqrt n 輸入乙個n,輸出n以內所有素數 include intprime int n if flag 0 優化 printf d i intmain 素數篩法原理 2是素數,那麼2的所有倍數都是合數...

篩法求素數 線性篩法求素數

2021年更新版 篩法求素數 線性篩法求素數 要理解篩法求素數首先要知道乙個定理,整數唯一分解定理 任意大於等於2的正整數都有且只有一種方式寫出其質因子的乘積表示式。a p1p2p3p4 pn pi是素數且pi pj eg 2 2 4 22 12 223 36 2233 也就是說任意乙個合數都能分成...

Eratosthenes篩法(素數篩)

最一般的素數篩思想很簡單,對於不超過maxx的每個非負整數p,刪除2p,3p,4p,然後剩下的就是素數,複雜度o nlogn 因為對內層迴圈n 2 n 3 n n 小於 1 1 2 1 3 1 n ln n 1 其中 為尤拉常數 0.577218 應當注意,1不是素數哦 這樣已經不慢,但由於所有非素...