經典題,求出小於 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...