Python - 打印前1000个素数不会停止

时间:2014-07-25 20:36:20

标签: python for-loop primes

我的最新代码出现问题,我根本不知道如何解决。基本上,我打印出前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()

5 个答案:

答案 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