Seite 2 von 2
Verfasst: Sonntag 2. August 2009, 17:01
von Hyperion
Weil Du in der prime()-Funktion nach spätestens einem Durchlauf die Funktion verlässt. Hättest Du durch ein einfaches print rausgefunden
Daher klappt meine Optimierung auch nicht. Habs auch grad gesehen.
Du solltest die Liste auch besser übergeben und direkt in der Funktion erweitern - somit vermeidest Du eine globale Variable.
Welchen Algo zur Berechnung willst Du denn eigentlich implementieren?
Verfasst: Sonntag 2. August 2009, 17:24
von Tompazi
Nachdem wir nun wissen, dass Primzahlen nicht all zu selten sind, müssen wir uns nun ein
Verfahren überlegen, mit dem man feststellen kann, ob eine zufällig gewählte Zahl tatsächlich
prim ist.
Eine einfache Methode ist das so genannte Probedivision (engl. trial-testing). Die Grundidee
dieses Verfahrens ist, n sukzessive durch Primzahlen 2, 3, 5, 7, 11,..., < n (Sieb des
Eratosthenes) zu teilen.
Code: Alles auswählen
def prime (n):
for i in prime_numbers:
if i > math.sqrt(n):
if n % i == 0:
return None
return n
Leider bekomme ich da zu viele nicht Primzahlen zurück...
MfG Tompazi
Verfasst: Sonntag 2. August 2009, 17:30
von EyDu
Tompazi hat geschrieben:Leider bekomme ich da zu viele nicht Primzahlen zurück...
Dann denke doch noch einmal über die Position des letzten return nach. Zur Not füge einfach zwischen zwei Zeilen immer ein print ein und lasse dir etwas ausgeben.
Auch die erste Bedingung in der Schleife ist falsch.
i<sqrt(n) <=> i**2 < n; i,n >= 0
Edit: ja, meine ich
Verfasst: Sonntag 2. August 2009, 17:35
von jbs
EyDu hat geschrieben:
i<sqrt(n) <=> i*2 < n; i,n >= 0
meinst du nicht i**2?
Verfasst: Sonntag 2. August 2009, 17:52
von Tompazi
Ich komme nicht dahinter ..
MfG Tompazi
Verfasst: Sonntag 2. August 2009, 18:04
von Hyperion
Dann zeig uns doch mal Deinen Code der prime()-Funktion mit den print-Statements zum Debugging. Du musst uns schon zeigen, was Du so probiert hast - raten können wir da nicht.