列出所有的質數 python using generators
阿新 • • 發佈:2018-06-16
prime 除了 != yield lse UC number solution IV
一般儲存一系列數據可以用list,但是如果數據量很大的時候這樣會很占用內存。因此除了普通的函數以外,還有一種generator的方式。標誌語句為yield。
題目要求:
Write a generator, genPrimes, that returns the sequence of prime numbers on successive calls to its next() method: 2, 3, 5, 7, 11, ...
分析:
這裏要想如何生成質數。一般若x為質數,則x%p != 0(p為之前所有的質數)
初次寫的代碼:
def genPrimes(): primelist = [2,] yield 2 num = 3 flag = 0 while True: for p in primelist : if (num%p) == 0 : flag = 1 if flag == 1 : flag = 0 num += 1 else : yield num primelist.append(num) num += 1
除了這種寫在一起的方式,還可以單獨寫一個函數來判讀是否為質數。
other solution
def genPrimes():
n = 1
primesList = []
while True:
n += 1
if all(n % i != 0 for i in range(n-1, 1, -1)):
primesList.append(n)
yield n
def genPrimes(): from itertools import count as cnt pl = [2] return (pl.append(i) or pl[-2] for i in cnt(3,2) if all(i%p for p in pl))
列出所有的質數 python using generators