簡體   English   中英

查找1至20代碼之間的質數而不返回質數2,什么是正確的算法?

[英]finding prime numbers between 1 to 20 code not returning prime number 2,what is the correct algorithm?

查找1至20之間的質數

a = []
for i in range(2,20):
    for j in range(2,20):
        if((i % j) == 0):
            break;
        else:
            a.append(i)
return a

這是我得到的輸出-

[3, 5, 5, 5, 7, 7, 7, 7, 7, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19]

我希望2也應該包含在輸出中

您放錯了else ,這使篩子無法正常工作。 另外,內部循環只應迭代直到j == i - 1為止。 正確的代碼如下所示:

a = []
for i in range(2,20):
    for j in range(2,i):
        if((i % j) == 0):
            break
    else:
        a.append(i)
return a

差:在原始代碼中的任何i針對其j被發現,使得i % j != 0將被附加到a 使用更正后的代碼,如果內部循環沒有被break終止,則只會附加i 另外,您的代碼還會測試[2,20 [2, 20[范圍內所有數字的可除性,但即使素數也可被自身整除,這就是為什么2不在代碼輸出中的原因。

在兩個循環的第一次迭代中i=2j=2 如果條件是真,然后,因此,內循環停止而不增加2至a

暫無
暫無

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

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