打印范围内的质数

问题描述 投票:1回答:2
k=int(input())
res=[2]
for i in range(2,k+1):
    if i%2==0:
       continue 
    else:
      for j in range(2,i):
          if i%j==0 or j%2==0 :
              break
      else:
             res.append(i)
print(res)

此代码用于在给定的数字范围内查找质数。我试图运行代码,但是列表中只有数字2。谁能告诉我发生了什么。我删除了j%2 == 0。它正常工作。我只想知道我的错误

python-3.x list for-loop if-statement primes
2个回答
0
投票

您的代码有一个问题,在内部循环中,或条件不正确,如@kederrac突出显示。您不需要j%2 == 0,因为j总是从2开始并且i%j==0已经涵盖了条件

k=int(input())
res=[2]
for i in range(2,k+1):
    if i%2==0:
       continue 
    else:
      for j in range(2,i):
          if i%j==0 :
              break
      else:
             res.append(i)
print(res)

0
投票

在您的内部循环中j变量从值2开始,然后有一个if语句始终为True,因为j%2==0始终为2%2==0且始终为True,因此您始终从break开始内部for循环迭代的第一步

您可以使用:

import math 

k=int(input())
res=[]
for i in range(2, k+1):
    is_prime = True
    for x in range(2, int(math.sqrt(i) + 1)):
        if i % x == 0 :
            is_prime = False
            break
    if is_prime:
        res.append(i)

print(res)
# k = 20

输出:

[2, 3, 5, 7, 11, 13, 17, 19]
© www.soinside.com 2019 - 2024. All rights reserved.