我的最新代码出现问题,我根本不知道如何解决。基本上,我打印出前1000个素数 - 但我的代码打印出的素数远远超过前1000个素数限制。我在我的代码中指定停在1000.这是我的代码:
import itertools
counter = 1
while (counter <= 1000):
for i in itertools.count(start=3, step=1):
for a in range(2, i/2):
if (i % a == 0):
break
else:
print i
counter += 1
我真的不知道如何解决这个问题。有人可以帮忙吗?
解决方案
我通过在else块中添加这段代码来修复此代码:
if (counter == 1000):
sys.exit()
答案 0 :(得分:2)
Count
永远不会停止产生数字,所以基本上你被困在for
循环中。
快速解决方法是:
import itertools
counter = 1
for i in itertools.count(start=3, step=1):
for a in range(2, i/2):
if (i % a == 0):
break
else:
print i
counter += 1
if counter > 1000:
break
答案 1 :(得分:2)
您对答案无效的原因有很多回应。我是怎么做到的!我宁愿建立一个素数生成器并从中拉出来。
class PrimeNumberGen(object):
def __init__(self,max_prime=None):
if max_prime:
self.numbers = range(2, max_prime+1)
else:
self.numbers = itertools.count(start=2, step=1)
def __next__(self):
for num in self.numbers:
for divisor in range(2, int(num**0.5)+1):
if num % divisor == 0:
break
else:
return num
primes = PrimeNumberGen()
for _ in range(1000):
print(next(prime))
答案 2 :(得分:1)
您的版本卡在内部循环中。
import itertools
counter = 1
for i in itertools.count(start=3, step=1):
if(counter<1000):
for a in range(2, i/2):
if (i % a == 0):
break
else:
print i
counter += 1
else:
break
答案 3 :(得分:0)
你需要在你的所有循环之外初始化你的计数器,你写的方式你每次都在你的内部重置它:
counter = 0
nums = itertools.count(start=3, step=1)
while counter <= 1000:
i = next(nums)
for a in range(2, i/2):
if i % a == 0:
break
else:
print(i)
counter += 1
答案 4 :(得分:0)
即使你使用了你的解决方案,你的代码也会输出999个素数而不是1000个。(最后一个数字应该是7919而不是7907)https://primes.utm.edu/lists/small/1000.txt
代码中唯一的问题是,
counter = 0 #instead of counter = 1