私はPythonでEratosthenesの篩を実装しています。これは、探索範囲の端部近傍複合数値を返す:Eratosthenesのふるいは大きな合成番号を返します(これはエラーです)
def primes_Ero(n=1000):
primes = []
a = [True]*(n+1)
a[0] = a[1] = False
for (i,isprime) in enumerate(a):
if isprime:
for n in range(i*i,n+1, i):
a[n] = False
primes.append(i)
return primes
大きな数字を使用して、N、私は合成数で終わります。私は間違って何をやっている
n= 100; []
n= 500; [493, 497]
n= 1000; [961, 989]
n= 10000; [9701, 9727, 9797, 9853, 9869, 9917, 9943, 9953, 9983, 9991, 9997]
:私はどのような数字が複合され、
が n個を考えると、(ブルートフォース方式と比較して)複合された番号を確認するチェックを作ったのですか?まずn
がパラメータ値(デフォルト= 1000)が、ループの最初に実行N
i < n < i + n
を保持した後に設定されている
for n in range(i*i, n+1, i):
:
if i == 31: 'の意図は何ですか? –
また、2つの異なるものに 'n'を使用しています。 –
@PaulHankinさんが持っています。内側のforループの変数を変更します。たとえば、 'for k in range(i * i、n + 1、i):'のようになり、問題は解決します。 – jas