Sieb des Eratosthenes
Verfasst: Dienstag 1. Januar 2013, 23:30
Hi, ich habe mich am Sieb des Eratosthenes versucht und zwei Implementationen programmiert. Ich meine, dass ich die Skripte schon etwas optimiert habe, wäre aber für Feedback dankbar:
(1) Mit Listen
(2) Mit Wörterbüchern
Für Feedback, Kritik und Verbesserungsvorschläge wäre ich dankbar. Wo könnte man Quellcode optimieren, wo habe ich Optimierungsmöglichkeiten übersehen? Für Kritik am Programmierstil bzw. auch an Benennungen bin ich offen - glücklichere Namen sind mir nicht eingefallen...
Quelle
(1) Mit Listen
Code: Alles auswählen
def sieben(zahl):
''' Eine erste Implementierung des
Sieb des Eratosthenes mit Listen
'''
liste = [2]
liste.extend([i for i in range(3,zahl+1,2)])
for z in range(2,zahl+1):
if z in liste:
exliste = [e * z for e in range(z,zahl+1) if e * z <= zahl]
# print(z, exliste)
if len(exliste) == 0:
break
else:
for e in exliste:
if e in liste:
liste.remove(e)
return liste
ergebnis = sieben(10000)
print(", ".join(map(str,ergebnis)),end=".\n")
Code: Alles auswählen
def sieben(zahl):
''' Eine erste Implementierung des
Sieb des Eratosthenes mit einem Woerterbuch
'''
keys = [2]
keys.extend([i for i in range(3,zahl,2)])
woerterbuch = {}
for key in keys:
woerterbuch[key] = True # True = prime (!)
for key in keys:
if woerterbuch[key] == True:
vielfache = [i * key for i in range(key,zahl+1) if i * key <= zahl]
# print(key,vielfache)
if len(vielfache) == 0:
break
else:
for item in vielfache:
if item in woerterbuch:
woerterbuch[item] = False
return [i for i in keys if woerterbuch[i] == True]
ergebnis = sieben(1000)
print(", ".join(map(str,ergebnis)),end=".\n")
Quelle