求質數的三重境界

2021-10-11 11:53:41 字數 729 閱讀 7791

經典題,求出小於 n(比如100)的所有質數。

質數的定義還是不厭其煩贅述一下:大於1的正整數,且不能被1和它本身之外的正整數整除。質數又稱素數,其他的就是合數。

本文用python實現。

1,試除法

根據質數的定義,很容易得出直接的推導:遍歷2到n,對每個數 i ,都用2到 i 的整數去試除 i,一旦 i 被整除,說明它是合數。

def prime(n):

ret = [2] #第乙個質數是2

for i in range(3, n+1):

for j in range(2, math.ceil((math.sqrt(i)))+1): #從2遍歷到根號i

if i%j == 0:

break

else: #一旦被整除break,就不會進else

print(ret)

其中細節優化是試除時,只需遍歷2到根號i ,沒必要遍歷到 i。因為 i 若是合數,除數和商必然有乙個小於等於根號 i,另乙個大於等於根號 i。

2,埃氏篩法

複雜度:o(nloglogn)

核心思想就一句:把不大於根號n的所有質數的倍數都篩除,剩下的就是素數。

遍歷到2時,篩除2、4、6。。。100

遍歷到3時,篩除3、6、9。。。99

...遍歷到10時,篩除1

人生三重境界

人生有三重境界,這三重境界可以用一段充滿禪機的語言來說明,這段語言便是 看山是山,看水是水 看山不是山,看水不是水 看山還是山。看水還是水。這就是說乙個人的人生之初純潔無瑕,初識世界,一切都是新鮮的,眼睛看見什 麼就是什麼,人家告訴他這是山,他就認識了山 告訴他這是水,他就認識了水。隨著年齡漸長,經...

人生三重境界

古今之成大事業 大學問者,必經過三種之境界 昨夜西風凋碧樹,獨上高樓,望盡天涯路 此第一境界也 衣帶漸寬終不悔,為伊消得人憔悴 此第二境界也 這三重境界可以用一段充滿禪機的語言 來說明。這段語言便是 看山是山,看水是水 看山不是山,看水不是水 看山還是山,看水還是水。第一階段 看山是山,看水是水。童...

BaseAdaPter的三重境界

逗比式 文藝式 普通式 1 逗比式 view view minflayer.inflate r.layout.item,null 存在缺點 重複創造view findviewbyid依然會浪費大量時間 逗比式 view view minflayer.inflate r.layout.item,nul...