我有一个数字[7, 9, 11, 13, 15, 20, 23]的列表,我需要从给定的列表创建一个质数列表。
我已经写了下面的代码,但结果9 & 15也是质数。我不明白我在这里错过了什么。
a = [7, 9, 11, 13, 15, 20, 23]
x = []
for i in range (0, len(a)):
num = a[i]
for m in range (2,num):
if (num % m)==0:
break
else:
print('This is prime', num)
x.insert(i, num)
break我期望输出列表x为[7, 11, 13, 23]。
发布于 2019-09-03 03:09:24
如果num % m != 0不意味着num是质数,那么对于所有可能的m值,它都必须为真(可以通过递增到num // 2来减少,甚至可以减少到只到sqrt(num)),为此,您可以使用for ... else块( else块仅在for正常退出时执行,没有break,这只发生在质数上):
a = [7, 9, 11, 13, 15, 20, 23]
x = []
for num in a: # iterate with the value when you don't need the index
for m in range(2, (num // 2) + 1):
if num % m == 0:
break
else:
print('This is prime', num)
x.append(num) # use `append` to insert at the tail of the list
print(x)输出:
This is prime 7
This is prime 11
This is prime 13
This is prime 23
[7, 11, 13, 23]https://stackoverflow.com/questions/57761670
复制相似问题