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 的演算法就足夠了。但如果要對許多整數進行素性測試,則有更為高效的演算法,其中就包括埃拉託斯特尼篩法,簡稱埃氏篩法...