Re: Primzahlen im 100-stelligem Bereich mit Pascal
Verfasst: 22.09.2021, 19:18:20
Hallo lieber Pedaltreter,
es ist natürlich klar, dass die Berechnungen von Primzahlen immer länger dauern, je größer die zu berechnende Zahl wird. Erschwerend wirkt es sich zeitlich auch noch darauf aus, dass mit Strings gerechnet wird, anstatt mit Real-, Extended- bzw. Integer- Zahlen.
Die von mir dargelegten Routinen mit String Berechnungen funktionieren lediglich, auch wenn sie zeitintensiver sind. Außerdem können die Routinen sicherlich, sofern sie zur Berechnung von Primzahlen eingesetzt werden, noch verfeinert und effektiver programmiert werden. Bei der Berechnung von Primzahlen müssen nicht alle Fehlerüberprüfungen vorgenommen werden, wie sie in die einzelnen Funktionen eingesetzt wurden, weil die Fehler von vornherein vermieden werden können. Auch die Überprüfung auf negative Zahlen kann wegfallen, weil dies nur Zeit kostet und negative Zahlen bei der Primzahlberechnung wohl nicht vorkommt.
Weitere Optimierungen können bei der schriftlichen Division vorgenommen werden. Zum Beispiel basiert diese hauptsächlich auf das Subtrahieren. Sollte der Divisor noch im Wertebereich von int64 Variablen sein, wäre die Subtraktion mit Integer in Erwägung zu ziehen.
Auch die Optimierung des Wurzelziehens sollte in Betracht gezogen werden. Bei meiner Berechnung wurde ein Algorithmus der schrittweisen Annäherung herangezogen. Kann man machen, es gibt jedoch auch andere Algorithmen, wie zum Beispiel die Ansicht eines Geometriebeispiels: Möchte ich die Wurzel aus 25 ziehen, kann ich mir ein Rechteck vorstellen von 25 * 1. Jetzt versuche ich das Rechteck zu einem Quadrat zu führen: 2 * 12.5, 3 * 8.3, bis ich auf 5 * 5 komme.
Letzten Endes bleibt zu überlegen, ob die String Berechnung wirklich das Optimalste ist, oder ob es noch andere Möglichkeiten gibt. Meine dargelegten Routinen waren nur ein funktionales Beispiel, was sich sicherlich auf vielfältiger Weise optimieren lässt.
Liebe Grüße, das Sternenlicht...
es ist natürlich klar, dass die Berechnungen von Primzahlen immer länger dauern, je größer die zu berechnende Zahl wird. Erschwerend wirkt es sich zeitlich auch noch darauf aus, dass mit Strings gerechnet wird, anstatt mit Real-, Extended- bzw. Integer- Zahlen.
Die von mir dargelegten Routinen mit String Berechnungen funktionieren lediglich, auch wenn sie zeitintensiver sind. Außerdem können die Routinen sicherlich, sofern sie zur Berechnung von Primzahlen eingesetzt werden, noch verfeinert und effektiver programmiert werden. Bei der Berechnung von Primzahlen müssen nicht alle Fehlerüberprüfungen vorgenommen werden, wie sie in die einzelnen Funktionen eingesetzt wurden, weil die Fehler von vornherein vermieden werden können. Auch die Überprüfung auf negative Zahlen kann wegfallen, weil dies nur Zeit kostet und negative Zahlen bei der Primzahlberechnung wohl nicht vorkommt.
Weitere Optimierungen können bei der schriftlichen Division vorgenommen werden. Zum Beispiel basiert diese hauptsächlich auf das Subtrahieren. Sollte der Divisor noch im Wertebereich von int64 Variablen sein, wäre die Subtraktion mit Integer in Erwägung zu ziehen.
Auch die Optimierung des Wurzelziehens sollte in Betracht gezogen werden. Bei meiner Berechnung wurde ein Algorithmus der schrittweisen Annäherung herangezogen. Kann man machen, es gibt jedoch auch andere Algorithmen, wie zum Beispiel die Ansicht eines Geometriebeispiels: Möchte ich die Wurzel aus 25 ziehen, kann ich mir ein Rechteck vorstellen von 25 * 1. Jetzt versuche ich das Rechteck zu einem Quadrat zu führen: 2 * 12.5, 3 * 8.3, bis ich auf 5 * 5 komme.
Letzten Endes bleibt zu überlegen, ob die String Berechnung wirklich das Optimalste ist, oder ob es noch andere Möglichkeiten gibt. Meine dargelegten Routinen waren nur ein funktionales Beispiel, was sich sicherlich auf vielfältiger Weise optimieren lässt.
Liebe Grüße, das Sternenlicht...