码迷,mamicode.com
首页 > 编程语言 > 详细

列出所有的质数 python using generators

时间:2018-06-16 13:32:55      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:数据   ext   ret   lse   while   mes   returns   number   占用   

一般储存一系列数据可以用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

标签:数据   ext   ret   lse   while   mes   returns   number   占用   

原文地址:https://www.cnblogs.com/litingyu/p/9189076.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!