[英]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=2
和j=2
。 如果條件是真,然后,因此,內循環停止而不增加2至a
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.