簡體   English   中英

"獲取python 3中的素數列表"

[英]Get a list of prime numbers in python 3

初學者。 我正在嘗試返回一個包含從 0 到 num 的所有素數的列表。 有人可以幫我找出我的代碼有什么問題嗎? 我總是得到一個空列表。 非常感謝! (我使用的是 python 3.6)

def task(num):
    num = int(num)
    lst = []
    if num < 3:
        return lst
    else:
        for i in range(3,num):       
            if not i & 1:
                lst = lst
            else:
                primetest = range(3, int(i ** 0.5) + 1, 2)
                for n in primetest:
                    if i % n != 0:
                        lst.append(i)

    return lst

task(5)

主要問題在於您的內部 for 循環:

有了您的代碼將追加與列表i每次發現在一些時間primetest不是的除數范圍i

您可能想在此處使用布爾值來存儲您找到i的除數這一事實,然后僅在沒有找到的情況下將其附加到列表中。

要回答您的問題,您的列表為空,因為在您的示例中, primetest范圍始終為空:

int(3**0.5) + 1 = 3  and   int(5**0.5) + 1 = 3
range(3,3,2) = []

數組為空是因為 range 函數不會包含上限,並且由於內部循環沒有做它應該在你的代碼中做的事情,結果將是一個空列表,直到任務函數的參數是上級的或等於 9

您的代碼在幾個方面都出錯了,請告訴我您是否理解以下操作的原因?

def task(num):
    num = int(num)
    lst = [2]
    if num < 3:
        return lst

    for i in range(3, num + 1):       
        if i % 2 == 1:
            for n in range(3, int(i ** 0.5) + 1, 2):
                if i % n == 0:
                    break
            else:
                lst.append(i)

    return lst

(注意: for else子句在這里很自然for else子句在循環中搜索時使用,找到時中斷,如果沒有遇到中斷,則使用常規的 stopIteration 退出循環執行其他部分,我說這里很自然,因為在偽代碼中你會說“如果我的數字可以被另一個小於它的平方的數字整除,它就不是素數,否則將它添加到素數列表中”http ://book.pythontips.com/en/latest/for_-_else.html了解更多詳情)

這絕不是一種快速的方法,但我試圖在提高代碼美感的同時盡可能接近您的嘗試精神

您可以在日期集中找到質數和最可分的數。`

a=[ int(x) for x in input("Enter 10 values: ").split() ]
c=[]
prime=[]
b=max(a)
for num in range(1,b+1):
    for i in range(2,num):
        if (num%i)==0:
            break
        else:
            prime.append(num)
for i in a:
    for j in prime:
        if i%j==0: 
        c.append(i)
from collections import Counter
e=Counter(c)
f=e.most_common(1)
f
def prim(z):
    lst = []
    for i in range(2, z+1):
        for j in range(2,i):
            if i % j == 0:
                break
        else:
            lst = lst + [i]
    return lst

打印(prim(20))

結果:

[2, 3, 5, 7, 11, 13, 17, 19]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM