【发布时间】:2015-02-12 07:07:56
【问题描述】:
我正在使用以下代码来测试素数。
def primes(n):
""" Returns a list of primes < n """
sieve = [True] * n
for i in xrange(3,int(n**0.5)+1,2):
if sieve[i]:
sieve[i*i::2*i]=[False]*((n-i*i-1)/(2*i)+1)
yield [2] + [i for i in xrange(3,n,2) if sieve[i]]
outfile = open('primes','w')
input = input("Feed Me:")
outfile.write(str(primes(input)))
print "Done"
有没有一种简单的方法来计算生成的素数。而不是打印实际数字? 也可以让这段代码生成大于 100000000 的素数而不会溢出吗?
【问题讨论】:
-
FWIW,您的代码只产生一个对象(一个列表),因此您应该将
yield更改为return。yield语句用于制作生成器;请参阅the docs 了解更多信息。 -
是的,那是在我乱搞的时候发生的。我更改了一些代码并不得不将其更改回来。然后我发布了愚蠢的版本。 :(
标签: python math memory-management