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

2021-09-25 22:19:30 字數 857 閱讀 7210

求素數的方法在現階段可以總結為三種

這種方法最為簡單但效率太低,經過優化時間複雜度最低是o(n*sqrt(n))

輸入乙個n,輸出n以內所有素數

#include

intprime

(int n)}if

(flag ==0)

優化 printf

("%d"

, i);}

}}intmain()

素數篩法原理:2是素數,那麼2的所有倍數都是合數,把2所有倍數都標記出來,以此類推,3也是素數,我們也可以把3的所有倍數都標記起來,最後我們可以把所有合數標記起來,素數沒有被標記。素數篩的時間複雜度o(nloglogn)比暴力列舉更加有效率,但我們可以看出6這個數字被標記了兩次(被2標記了一次又被3標記了一次)所以這種演算法還是有缺陷的。

輸入乙個n,輸出n( 2#include

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

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

素數篩法(埃氏篩,線性篩)

時間複雜度o nloglogn void prime int b prime i 1則是合數 原理很簡單,所有合數可以表示為乙個質數跟另乙個數的積,列舉每個已知素數的倍數就能標記完。但很明顯,這樣做會有重複。比如12 3 4 2 6,在2這個素數進行倍數標記時會標記,在3這個素數進行倍數標記時同樣會...

素數線性篩法(尤拉篩)

之前寫的埃式篩法複雜度達o n log n lo gn o n logn logn o n lo gn l ogn 在大數字的時候可能複雜度還不夠理想。這種做法對於乙個合數有可能會篩了多次,導致重複做功。引入尤拉篩法能夠解決這種多次篩同乙個數字的情況,理論演算法複雜度o n o n o n 精髓在於...