")) i=2 flag="prim-6ren">
gpt4 book ai didi

python - 单独使用 while 循环的素数生成器的逻辑错误

转载 作者:行者123 更新时间:2023-11-30 23:04:37 25 4
gpt4 key购买 nike

以下是生成素数的代码:

to_num=int(raw_input("Enter till where u wish to generate prime nos > "))

i=2
flag="prime"
j=2
while i <= to_num:

while j<i:

if i%j == 0:
flag="nprime"
break
else:
flag="prime"


if flag=="prime":
print "%d is prime"%i


j+=1
i+=1

但是产生的结果并不符合预期,例如:

Enter till where u wish to generate prime nos > 10
2 is prime
3 is prime
4 is prime
5 is prime
6 is prime
7 is prime
8 is prime
9 is prime
10 is prime

您能指导我哪里出错了吗?

P.S:使用for循环获得所需的结果。

最佳答案

你的 for 循环看起来像这样:

for i in range(2, to_num+1):
for j in range(2, i):

但是你的 while 循环看起来像这样:

i = 2
j = 2
while i <= to_num:
while j < i:

j += 1
i += 1

因此,在循环完成后,您永远不会将 j 重置回 2。您应该在外循环的开头添加 j = 2 以使 while 循环等效于 for 循环:

i = 2
while i <= to_num:
j = 2
while j < i:

j += 1
i += 1

最后请注意,您希望在每次迭代中递增j。在您问题的代码中,您将 j += 1 作为 if flag=="prime": 的一部分,因此它只会增加 j 为素数。相反,您需要将增量向上移动到 while 循环中:

i = 2
while i <= to_num:
j = 2
while j < i:
# the prime check here
j += 1

if flag == "prime":
print "%d is prime" % i

i += 1

我真的建议您使用比单个空格更大的缩进,以便自己看到这些问题。当所有内容都缩进得如此相似时,很难发现它们。

关于python - 单独使用 while 循环的素数生成器的逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com