0

这是一个简单的素数 Eratosthenes 筛子,它删除倍数并将它们附加到空的倍数列表中。我的问题是,如果我在两个循环中都使用n而不是,答案是一样的。n+1for

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+1n输出仍然是相同的:

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

4

1 回答 1

1

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

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

于 2013-07-25T08:11:06.227 回答