这是一个简单的eratosthenes sieve for prime数字,它删除了多个并将它们附加到空列表中。我的问题是,如果我在n
个循环中使用n+1
而不是for
,答案就会出现问题。
def eratosthenes(n):
multiples = []
for i in xrange(2, n+1):
if i not in multiples:
print i
for j in xrange(i*i, n+1, i):
multiples.append(j)
返回输出,如
eratosthenes(10)
2
3
5
7
如果我在两个循环中用n+1
替换n
,则输出仍然相同:
def eratosthenes(n):
multiples = []
for i in xrange(2, n):
if i not in multiples:
print i
for j in xrange(i*i, n, i):
multiples.append(j)
返回与上述函数相同的输出...
eratosthenes(10)
2
3
5
7
我的问题是为什么我们使用n+1
代替n
?
答案 0 :(得分:1)
Python range()
和xrange()
函数(如Python切片表示法)不包含结束值; xrange(2, 10)
生成从2
到9
的8个数字,不 10. n + 1
确保n
是生成范围的一部分。
使用eratosthenes(7)
或eratosthenes(11)
查看差异; 10不是素数,正在过滤掉。