Einsendung:

Schnellere Version (i<=sqrt(zahl))

Ich nehme jetzt einfach mal einen Funktion vorweg, weil ich das Array-Programm mal auf einem langsamen Rechner ausprobiert habe und das etwas gedauert hat:
 Damit die Primzahlen schneller berechnet werden, kann man die Schleifendurchläufe in der for-Schleife verringern, indem man anstatt

   for(int i=2; i<zahl-1; i=i+1)

oder

   for(int i=2; i<=(zahl/2); i=i+1)

folgendes schreibt:

   for(int i=2; i<=sqrt(zahl); i=i+1)

 Die Funktion sqrt zieht die Quadratwurzel aus der Zahl in den Klammern. Vorher muß man aber <math.h> inkludieren!

Das Vorwegnehmen ist kein Problem. Diese Funktion ist kein neues Sprachmittel und nicht so weit vom aktuellen Stand weg, daß es irgend jemandem Probleme bereiten könnte.
Es gibt die Funktion

double sqrt(double zahl) // berechnet Wurzel der Zahl.

Diese Funktion steht in der Datei <math.h>.
Der Trick mit der sqrt-Funktion ist überzeugend.
Begründung:
Falls es zwei Zahlen a und b gibt mit a*b==zahl, dann gilt immer:
Wenn a<sqrt(zahl), dann ist b>sqrt(zahl).
Wenn man nur eine der Zahlen a oder b sucht, reicht es also, bis sqrt(zahl) zu suchen.
Weil Multiplikationen recht schnell sind (ganz im Gegensatz zum Wurzelziehen) bietet sich auch folgendes an:

   for(int i=2; i*i<=zahl; i=i+1)


Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern.
[aktuelle Version] [inhalt] [index]      [Fehlerkorrektur, Verbesserungsvorschlag]

© Volkard Henkel <volkard@normannia.de>, last update: 08/25/00