Ich implementiere das Sieb von Eratosthenes in Python. Sie gibt zerlegbare Zahlen am Ende des Suchbereiches:Sieb von Eratosthenes gibt große zusammengesetzte Zahl zurück (was ein Fehler ist)
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
Wenn größere Zahlen verwenden, n ich mit zusammengesetzten Zahlen enden. Ich habe einen Scheck, um zu sehen, welche Zahlen sind zusammengesetzte (verglichen mit einem Brute-Force-Methode),
n Gegeben, was Zahlen sind Composite:
n= 100; []
n= 500; [493, 497]
n= 1000; [961, 989]
n= 10000; [9701, 9727, 9797, 9853, 9869, 9917, 9943, 9953, 9983, 9991, 9997]
Was mache ich falsch?
Was ist die Absicht von 'if i == 31:'? –
Außerdem verwenden Sie 'n' für zwei verschiedene Dinge. –
@PaulHankin hat es. Ändern Sie die Variable in der inneren for-Schleife, z. B .: 'für k im Bereich (i * i, n + 1, i):' und das Problem verschwindet. – jas