埃氏篩法 python

2021-08-23 12:15:44 字數 856 閱讀 6232

def main():

for n in primes():

if n < 1000:

print(n)

else:

break

#可以先構造乙個從3開始的奇數序列

def _odd_iter():

n = 1

while true:

n = n + 2

yield n

#帶有 yield 的函式在 python 中被稱之為 generator(生成器)

#返回乙個 iterable 物件

# 這是乙個篩選素數的方法

在乙個函式中,程式執行到yield語句的時候,程式暫停,返回yield後面表示式的值,

在下一次呼叫的時候

從yield語句暫停的地方繼續執行,如此迴圈,直到函式執行完'''

def _not_divisible(n):

return lambda x: x % n > 0

#lambda 其實就是乙個匿名函式.....就是乙個函式 不過比較簡短而已

def primes():

yield 2

it = _odd_iter()

while true:

n = next(it)

yield n

it = filter(_not_divisible(n), it)

'''filter()函式返回的是乙個iterator,也就是乙個惰性序列,所以要強迫filter()完成計算結果,需要用list()函式獲得所有結果並返回list。'''

if __name__ == '__main__':

main()

埃氏篩法 素數篩

埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...

素數 埃氏篩法

題目 求2 100以內的素數。素數 prime number 又稱質數,是指乙個大於1的自然數,除了1和它本身外,不能被整除以其他自然數。解法一 根據素數的定義,即用該數除比其小的數 1除外 都不能除盡,即為素數 public class prime if i n system.out.print ...

數論 埃氏篩法

這學期的離散數學課程學了一點初等數論,其中的埃氏篩法當時課上沒有太懂,課後看了 挑戰程式設計競賽 一書終於弄懂了。這本書確實很好!演算法簡潔優美。如果只對乙個整數進行素性測試,通常o n 的演算法就足夠了。但如果要對許多整數進行素性測試,則有更為高效的演算法,其中就包括埃拉託斯特尼篩法,簡稱埃氏篩法...