n = int(input("input n"))
prime = [2]
base = 3
order = 0
while base < n + 1:
if order < len(prime):
if base % prime[order] == 0:
order = len(prime)
else:
order += 1
else:
prime.append(base)
order = 0
base += 1
print (prime)
我正在尝试创建一个从1到给定数字&#39; n&#39;的素数列表。 (忽略小于3的数字的情况)
我打算做的是:
无论我为n添加什么值,我只会在打印的主要列表中获得单值2。请帮助找出哪个部分是错误的。
答案 0 :(得分:0)
您的代码失败的原因是您没有正确检查所有存储的素数 - 您需要第二个循环。幸运的是,Python可以通过两种不同的方式为您提供方便:值列表可以轻松循环,else
支持for
。修改后的代码应如下所示:
n = int(input("input n"))
prime = [2]
base = 3
while base < n + 1:
for p in prime:
if base % p == 0:
# base is NOT a prime, break out
break
else:
# loop ran to completion
prime.append(base)
base += 1
print (prime)
因此,我们使用if
循环检查for
列表中的所有值,而不是其他prime
语句,而这些语句并不完全符合您的想法。将其分配给p
)并按照您的预期进行划分。如果模数为0
,则循环不会中断,else
块将不会运行,如果没有任何素数导致0
模数,则else
块将被触发,将新发现的素数添加到列表中等等。
示例:
$ python3 foo.py
input n19
[2, 3, 5, 7, 11, 13, 17, 19]
如果你想保留现有的逻辑(即没有for循环),你可以在里面做另一个while
循环,并记住在它之前设置order
到0
。