輸出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]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章