Ich habe mir als Übung ein kleines Programm geschrieben, dass Primzahlen berechnet, nach 50000 überprüften Zahlen aufhört und den Status in Dateien speichert. Ich habe das Programm schon versucht so effizient wie möglich zu machen, doch bin ich mir sicher, dass die Leute, die was davon verstehen, noch mehr Möglichkeiten finden, das Programm zu verbessern. Hier der Sourcecode:
PS: Ich wäre auch für Stilverbesserung dankbar, da ich mir gleich einen ordentlichen Programmierstil angewöhnen möchte
Ich habe auch mal so ein Programm geschrieben. Allerdings hat meins alle Primzahlen aus einem bestimmten Zahlenabschnitt rausgesucht und in eine Datei geschrieben. Bei deinem Programm wird aber anscheinden immer nur eine Zahl rausgeschrieben. Und dein Überprüfvorgang ist auch nicht sehr schnell. Ich stelle mal mein Programm hierhin:
Von anfang bis ende wird nach Primzahlen gesucht und in die Datei Log.html geschrieben. Allerdings dürfen für anfang nur ungerade Zahlen verwendet werden. Wenn dein Programm mal alle Zahlen aufschreiben würde, könntest du ja mal einen Schnelligkeitstest machen.
Eure Ausführungen haben mich an alte, längst vergessene Zeiten und das Sieb des Eratosthenes erinnert - wohl einer der ersten Algorithmen, mit denen sich ein(e) angehende(r) Programmierer(in) herumärgern muss. ^^
@getöteter_ork:
Die Idee, eine erste Kurzschlussreaktion mit 2,3,5 und 7 zu machen, finde ich gut.
Die Bedingung "a <= y / 2" in der For-Schleife solltest du zu "a <= sqrt(y)" abändern, sofern es sich um die Abbruchbedingung handelt, bis zu der die Überprüfung laufen soll.
Deinem Quelltext nach dürftest du eigentlich keine Liste von Primzahlen herausbekommen, sondern eher die letzte grösste Primzahl bis zur geforderten Grenze.
@Rolus:
Schöne Idee, dass mit der HTML-File.
Die Break-Anweisung für "c<1" soll sicher gelten für "c>1". Ansonsten geht die Schleife ja immer bis zum letzten "tmp" durch, also immer bis zur Wurzel der Ausgangszahl.
Generelle Anmerkungen:
Bei beiden Versionen fehlt mir eine Idee, um die vorhergehenden Ergebnisse mit einfliessen zu lassen. Für jede zu testende Zahl werden sämtliche Berechnungen immer wieder von vorn gestartet. Das ist sicher hinreichend für das Problem, eine einzelne Zahl auf Primzahl zu testen. Aber bei grösseren Bereichen sind sicherlich verschiedene Optionen der Wiederverwendbarkeit sinnvoll.
Nur mal so: Ich finde es schwierig, solche bereits optimierten Quelltexte zu lesen. Sie sind zwar formatiert, enthalten aber noch viel Zeug drumherum, Einlesen von Daten, Ausgabe von Daten, etc. Kann sein, dass nur ich das so sehe... dann verzeiht mir bitte, aber ansonsten wäre Pseudocode bzw. nur der wirklich wichtige Code-Ausschnitt imo wesentlich einfacher zu analysieren.
Denkanstösse gibt es unter anderem auf der gerngelesenen Wikipedia, wo auch ich mein geliebtes Sieb dieses schwer zu schreibenden Mathematikers wiedergefunden habe.
Das wäre auch mal ein schönes Topic für einen Contest gewesen, (den Meister Ineluki mit seinen Assemblerkenntnissen wohl gewonnen hätte).