在这个eratosthenes函数中使用n + 1的目的是什么?

时间:2013-07-25 08:09:22

标签: python sieve-of-eratosthenes

这是一个简单的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

1 个答案:

答案 0 :(得分:1)

Python range()xrange()函数(如Python切片表示法)不包含结束值; xrange(2, 10)生成从29的8个数字, 10. n + 1确保n是生成范围的一部分。

使用eratosthenes(7)eratosthenes(11)查看差异; 10不是素数,正在过滤掉。