1. 程式人生 > >列出所有的質數 python using generators

列出所有的質數 python using generators

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