exec - Globale Variable; und Performance Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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?
Benutzeravatar
Tompazi
User
Beiträge: 19
Registriert: Sonntag 2. August 2009, 10:05

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
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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
Zuletzt geändert von EyDu am Sonntag 2. August 2009, 17:36, insgesamt 1-mal geändert.
Das Leben ist wie ein Tennisball.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

EyDu hat geschrieben: i<sqrt(n) <=> i*2 < n; i,n >= 0
meinst du nicht i**2?
Benutzeravatar
Tompazi
User
Beiträge: 19
Registriert: Sonntag 2. August 2009, 10:05

Ich komme nicht dahinter ..

MfG Tompazi
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Antworten