Kannst du mir erklären, wie du das genau meinst? Ich habe jetzt schon nach iterieren im allgemeinen gesucht, verstehe aber irgendwie nicht was damit explizit gemeint ist.numerix hat geschrieben: Da du das ganze Sieb durchläufst, kannst du auch gleich über das Sieb iterieren anstatt eine neue Liste via range() zu erstellen und über diese zu laufen.
Und zum Code, pass ist weg und die 0 wird aus der Liste entfernt bzw. es wird eine neue Liste ohne die 0er erstellt. Anfangswerte m und m werden jetzt nicht mehr über die Funktion selbst übergeben.
Jetzt probiere ich gerade rum, wie ich es hinbekomme die geraden Zahlen zu überspringen. Scheint sehr einfach zu sein, aber der Schalter will sich bei mir nicht so einfach umlegen.
Code: Alles auswählen
def primes():
sieve = range(0,int(sqrt(1000000000))+1)
max_divider = int(sqrt(int(sqrt(1000000000))))/2
curr_divider = 2
sieve[1] = 0
while curr_divider <= max_divider:
for i in range(0,len(sieve)):
if sieve[i] != 0:
if int(sieve[i]) % curr_divider == 0 and int(sieve[i]) != curr_divider:
sieve[i] = 0
curr_divider += 1
new = []
for i in sieve:
if i != 0:
new.append(i)
return new