Bei Zahlen in der Grössenordnung von 10**300 dauert das Kinderspiel bloss ein paar Jahrzehnte.Bernd Jonsson hat geschrieben:Zu Punkt 2) sind wir wir auch einer Meinung. Mein Primzahltest(und andere) versucht ja auch eine Zerlegung und endet beim ersten Erfolg, meldet den Faktor jedoch nicht. Die nachfolgende Faktorisierung ist dann ein Kinderspiel.
Die Frage ist, ob Du nicht vielleicht ein bisschen ungeduldig warst.Das heißt, bei mittelgroßen Zahlen wie n = 10**8 funktioniert der range-Befehl noch fehlerfrei, aber beim Aufbau der Liste im return-Befehl
"return [2] + [x for x in s if x]"
erfolgt der virtuelle Speichermangel ohne jede Fehlermeldung
Bei 10**8 erzeugt das Programm eine Liste mit Zahlen die mindestens 800 MB belegt. Das ``return`` baut dann eine zweite Liste mit den Primzahlen auf, indem alle 10**8 Elemente untersucht werden und eine Ergebnisliste aufgebaut wird, die nochmal mindestens 46 MB belegt (5761455 Primzahlen). Durch die Art wie neuer Speicher bei wachsenden Listen dynamisch angefordert wird, kann man aber auch ruhig das doppelte annehmen, zusammen also ca. 900 MB an Daten. Wie sieht's bei Dir mit Speicher aus? Bei mir (512 MB RAM) ist die Kiste einfach nur noch am Swappen, das fängt schon beim Anfordern der ersten Liste mit `range()` an.
Solange der virtuelle Speicher noch nicht wirklich zuende ist, würde ich nein sagen.Frage: Ist das dann doch nicht ein Fehler des Python-Interpreters?