0

これは、倍数を削除し、倍数の空のリストにそれらを追加する、素数の単純なエラトステネスふるいです。私の質問は、両方のループの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+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?を使用するのかということです。

4

1 に答える 1

1

Pythonrange()xrange()関数は、Python スライス表記と同様に、終了値を含みません。は、からまでのxrange(2, 10)8 つの数字を生成します。10ではありません。生成された範囲の一部であることを確認します。29n + 1n

eratosthenes(7)またはを使用eratosthenes(11)して違いを確認してください。10 は素数ではないため、除外されています。

于 2013-07-25T08:11:06.227 に答える