def sieve(num):
notprime = []
for i in range(2, num+1):
if i not in notprime:
for k in range(i*i, num+1, i):
notprime.append(k)
print i
def unitTest():
sieve(1000)
这是我写的程序,用于查找素数。它工作得很好,但我希望它输出一个数字列表。例如:[2,3,5,7 ......]。我不能,为了我的生活,让这件事发生,并希望那里的人能够帮助我。
答案 0 :(得分:2)
只需声明新列表primes
,附加i
,然后在sieve
方法的末尾返回或打印列表:
def sieve(num):
notprime = []
primes = []
for i in range(2, num + 1):
if i not in notprime:
for k in range(i * i, num + 1, i):
notprime.append(k)
primes.append(i)
print primes
def unitTest():
sieve(1000)
<强>输出:强>
[2, 3, 5, 7, 11, 13, 17,...]
答案 1 :(得分:2)
您还可以将您的功能转换为生成器:
def sieve(num):
notprime = []
for i in range(2, num+1):
if i not in notprime:
for k in range(i*i, num+1, i):
notprime.append(k)
yield i
def unitTest():
list(sieve(1000))
这会节省一些内存以备将来使用(即使notprime
列表更大)。
答案 2 :(得分:0)
您需要先创建列表并将每个素数附加到该列表中;与notprime
列表完全一样。在完全遍历循环后,您可以打印完整列表:
def sieve(num):
notprime = []
prime = []
for i in range(2, num+1):
if i not in notprime:
for k in range(i*i, num+1, i):
notprime.append(k)
prime.append(i)
print prime
答案 3 :(得分:0)
对于那些感兴趣的人来说。
def sieve(num):
return sorted(set([aa for aa in range(2, num+1)]) - set([z for i in range(2, num+1) for z in list(set(range(2, num+1)) & set([k for k in range(i*i, num+1, i)]))]))