Python, Sieb des Eratosthenes?
Hallo,
ich schreibe morgen eine Klausur über einige Python Dinge. Könnte mir jemand sagen, was genau ich falsch gemacht habe? Ich habe versucht in Python die Primzahlen von 1-20 auszugeben (Sieb des Eratosthenes), komme aber nicht weiter.
Danke
Liste = [1,20]
Primzahlen = [1,2,5,8]
Liste[1] = 0
Liste[0] = 0
for z in Liste:
for Liste in Primzahlen:
if Liste == 0:
for i in range(2*Liste,20,x):
Liste[i] = 0
print(z)
4 Antworten
Ich glaube, was du suchst ist folgendes
Liste = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Primzahlen = [1,2,5,8]
Liste[1] = 0
Liste[0] = 0
for z in Liste:
for y in Primzahlen:
if z == y:
print(z);
Aber das ist natürlich nicht die beste Möglichkeit, das ganze zu machen. Ich schick gleich eine bessere rein.
Anzahl=raw_input("Anzahl: ")
for n in range(2, 10):
for x in range(2, n):
if n % x == 0: #modulo -> 8 % 3 = REST: 2 (2/3)
break
else:
print n, 'ist eine Primzahl'
Versuch mal das!
(Muss richtig formatiert werden)
Oh je mit dem Thema kenne Ich mich unfassbar schlecht aus sorry :c
https://www.youtube.com/watch?v=vFhdGMopfXU
Das Video ist ganz gut zum erklären, ist eine Vorlesung btw, könnte dich also betreffen...
Hoffe es hilft, habe mich mit Primzahlen noch nicht auseinandergesetzt.
Danke,leider geht es nicht um Python weder noch um das Sieb
Das kann man aber auch in Python anwenden!
https://www.youtube.com/watch?v=SpTAxH_Geow
Ich hoffe dich stört der indische Akzent nicht, da geht es 100% um Python!
Einfach erklärt, hoffe das ist was du suchst...
Folgender Code ergibt alle Primzahlen bis zu einer bestimmten Zahl mit Hilfe des Sieb des Erastothenes:
biggestNumber = 20;
numbers = []
for i in range(0,biggestNumber):
numbers.append(True)
for i in range(2,len(numbers)-1):
for j in range(i+1,len(numbers)-1):
if ((j % i) == 0): numbers[j] = False
for i in range(2, len(numbers)-1):
if (numbers[i]): print(i)
Bitte Code in Zukunft als Text posten, nicht als Bild. Um es zu testen, müsste ich es jetzt abtippen!
Dein erster Fehler ist, dass die Primzahlen nicht stimmen. 1 und 8 sind keine Primzahlen, dafür fehlt aber 3 und 7.
Abgesehen davon ist die Methode natürlich falsch. Du willst die Primzahlen herausfinden, also solltest du sie nicht zu Beginn in einer Liste eingeben.
Schau dir am besten nochmal das Sieb des Eratosthenes an; es sieht nicht so aus, als ob du es verstanden hättest.
Wenn du nicht weiterkommst, schau dir den Pseudocode auf Wikipedia an; den musst du nur noch in Python übersetzen.
Das mit den Primzahlen hab ich bereits rausgenommen, ich weiß nur nicht wie man das ganze in Python übersetzt, kommt nichts raus
Hier eine kleine Anregung: Du brauchst eine Liste, in der du speicherst, ob eine Zahl prim ist oder nicht. Am besten funktioniert das mit mit bool (True heißt Primzahl, False heißt keine Primzahl).
Die Liste erstellst du so:
liste = [True] * 20
Da Listen in Python bei 0 beginnen, wir aber bei 1 anfangen zu zählen, sind ein paar Hilfsfunktionen nützlich:
def ist_prim(n):
return liste[n - 1]
def setze_nicht_prim(n):
liste[n - 1] = False
Dann solltest du bedenken, dass die 1 keine Primzahl ist:
setze_nicht_prim(1)
Um über über alle Zahlen von 2 bis 20 zu iterieren, schreibe:
for n in range(2, 21):
Das heißt, 2 ≤ n < 21
Falls du immer noch nicht weiter kommst, hier die Lösung: https://code.sololearn.com/cZWHxkCd2Bdp/#py
nach der ersten schleife muss doch ein output gegeben werden?