snafu hat geschrieben:Um's nochmal deutlich zu sagen: Man benötigt zum Finden von Primfaktoren (wie ich jetzt gelernt habe) definitiv keine `is_prime()`-Funktion. Das Prinzip ist einfach, dass man mit der kleinstmöglichen Zahl als ersten Kandidaten beginnt und dann aufsteigend vorgeht. Immer dann, wenn die zu zerlegende Zahl durch einen Kandidaten teilbar ist, dann kann man sie solange durch den Kandidaten teilen bis sie *nicht* mehr durch diesen Kandidaten teilbar ist. Damit hat man dann auch ausgeschlossen, dass die Zahl noch durch irgendwelche Vielfachen des Kandidaten teilbar ist. Beispiel: Wenn man eine Zahl fortwährend durch 2 teilt, dann wird sie definitiv nicht mehr durch 4, 6, 8, ... teilbar sein. Wichtig dabei ist halt, dass die Ursprungszahl auch tatsächlich geschrumpft wird. Wenn die geschrumpfte Zahl irgendwann nicht mehr glatt durch den Kandidaten teilbar ist, dann probiert man das weitere Schrumpfen der Zahl mit dem nächsten Kandidaten solange bis dieser nicht mehr geht, usw. Man fährt solange fort bis man zu einem Kandidaten kommt, dessen Wert größer ist als der Wert der fortwährend geschrumpften Zahl. Dann ist man fertig und der letzte Kandidat, der noch ein glatter Teiler war (also: derjenige, der *vor* dem zur Abbruchbedingung führenden Kandidaten dran kam), ist der gesuchte größte Primfaktor.
Genau so isses (habe auch ich jetzt beim Pröbeln richtig begriffen).
Praktisch ist es aber nicht immer so einfach? Was ist z.B., wenn der erste Kandidat die Zahl selber ist, also n eine Primzahl ist? oder sie nur zwei Primfaktoren, z.B. 2 und eine Riesenzahl, hat? Hatte beim Pröbeln mit dem Programm von Sirius eine solche Primzahl gefunden, ich glaube eine 12-stellige (oder war sie noch höher?).
Verstehe das Programm von Sirius (noch) nicht, hatte in der Zwischenzeit auch keine Zeit, aber sie hat diese Primzahl im Nu herausgegeben. Möglich, dass es für noch sehr viel höhere Zahlen nicht mehr viel taugt : ) ... Überhaupt verstehe ich die meisten Programme hier nicht, es fehlt mir einfach noch das Grundwissen.
So wie ich mich kenne, werde ich mich aber morgen wieder ans Pröbeln machen ... oder soll ich es vorläufig belassen?
BlackJack hat geschrieben:Dein Hauptproblem, abgesehen von den vielen Sonderfällen die da unnötigerweise unterschieden werden, ist dass Du `n` nicht verkleinerst wenn Du einen Faktor gefunden hast. Dadurch testest Du deutlich mehr Teiler als nötig.
Und Du erzeugst dadurch auch mehr Primzahlen als nötig. Das kann man auf das Nötigste begrenzen in dem man das Programm so schreibt, dass jede gefundene Primzahl sofort nach dem sie gefunden wurde, verwendet wird um `n` zu verkleinern.
Ja, siehe oben. Die vielen Sonderfälle: ja, man kann das Programm bestimmt noch verkürzen, und all die Zwischenresultate hatte ich eigentlich für mich eingebaut, gehören nicht in ein fertiges Programm ... : ) Bin auch noch nicht dazu gekommen, Dein obiges Python-Programm zu testen, geschweige denn, es zu verstehen versuchen ...
Grüsslein, Gwunderi