输出n以内的所有素数(质数)

素数(质数):除能被自己和1整除,不能被其他数整除的数叫素数,1和0既非素数也非合数。

***素数一定是不能整除2和3,但不能整除2和3的不一定是素数如35和49

def _odd_iter(n):
    listE=[i for i in range(2,n+1)]
    k=0
    while k<len(listE):
        r=listE[k]
        for m in listE:
            if (m%r==0) and (m!=r):
                listE.remove(m)
        k= k+1
        # yield listE
        #print('长度:',len(listE))
    return listE

print(n,'以内的所有素数:',_odd_iter(100))

思路分析:

1、先生成3开头的奇数,因为偶数均不是素数

2、定义一个函数不能整除

3、通过filter过滤函数完成输出n以内的所有素数

def generateOdd(m):
    k=1
    while k<=m:
        k=k+2
        yield k

def Divisible(t):
    return lambda a:a%t>0

def prime(n):
    yield 2
    it=generateOdd(n)
    while True:
        try:
            k = next(it)
            yield k
            it = filter(Divisible(k),it)
        except StopIteration as e:
            print('Generator return value:', e.value)
            break
tmp=80
print(tmp,'以内的所有素数:',list(prime(tmp)))

80 以内的所有素数: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79]

猜你喜欢

转载自blog.csdn.net/qq_27437967/article/details/105025676