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。它正常工作。我只想知道我的错误
您的代码有一个问题,在内部循环中,或条件不正确,如@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)
在您的内部循环中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]