Python中的简单Prime生成器

有人可以告诉我这段代码在做什么吗?无论如何,它只是打印“计数”。我只想要一个非常简单的素数生成器(没什么花哨的)。

import math

def main():

count = 3

one = 1

while one == 1:

for x in range(2, int(math.sqrt(count) + 1)):

if count % x == 0:

continue

if count % x != 0:

print count

count += 1

回答:

有一些问题:

  • 当计数不除以x时,为什么要打印计数?这并不意味着它是素数,仅意味着该特定x不会将其除
  • continue 移至下一个循环迭代-但你确实想使用停止它 break

    这是你的代码,其中包含一些修复程序,它仅输出质数:

import math

def main():

count = 3

while True:

isprime = True

for x in range(2, int(math.sqrt(count) + 1)):

if count % x == 0:

isprime = False

break

if isprime:

print count

count += 1

有关更有效的质子生成,请参见其他人的建议,参见戊二烯筛。这是一个不错的,经过优化的实现,带有很多注释:

# Sieve of Eratosthenes

# Code by David Eppstein, UC Irvine, 28 Feb 2002

# http://code.activestate.com/recipes/117119/

def gen_primes():

""" Generate an infinite sequence of prime numbers.

"""

# Maps composites to primes witnessing their compositeness.

# This is memory efficient, as the sieve is not "run forward"

# indefinitely, but only as long as required by the current

# number being tested.

#

D = {}

# The running integer that's checked for primeness

q = 2

while True:

if q not in D:

# q is a new prime.

# Yield it and mark its first multiple that isn't

# already marked in previous iterations

#

yield q

D[q * q] = [q]

else:

# q is composite. D[q] is the list of primes that

# divide it. Since we've reached q, we no longer

# need it in the map, but we'll mark the next

# multiples of its witnesses to prepare for larger

# numbers

#

for p in D[q]:

D.setdefault(p + q, []).append(p)

del D[q]

q += 1

请注意,它返回一个生成器。

以上是 Python中的简单Prime生成器 的全部内容, 来源链接: utcz.com/qa/434743.html

回到顶部