Primzahlenprogramm
-
hi Leute,
ich habe gerade ein Primzahlenprogramm geschrieben (d.h. ich hab's versucht):
#include <stdio.h> #define MAXZAHLEN 250 int isPrim (int zahl) { int probier = 2; while (probier < zahl) { if ((zahl % probier) == 1) { return 0; } } return 1; } int main () { int i = 2; for (i; i <= MAXZAHLEN; i++) { if (isPrim (i)) printf ("%d\n", i); } return 0; }
Das Programm gibt 2 aus und hört dann auf (wird nicht beendet). Was hab ich falsch gemacht? Thx im **voraus
cu
eLk**
-
dein probier bleibt ja konstant...
und du solltest auf rest 0 pruefen nicht auf rest 1.
-
int isPrim (int zahl) { int probier = 2; while (probier < zahl) { if ((zahl % probier) == 1) { return 0; } } return 1;
lass probier durch ne schleife hochzählen (endwert i,oder besser und schneller:wurzel aus i)
ausserdem wie gesagt,auf rest 0 testen nicht rest 1
-
Und außerdem ellen langsam!
google mal nach "Sieb des Eratosthenes". Da wird nen gute methode beschrieben.
-
Original erstellt von xroads42:
**Und außerdem ellen langsam!google mal nach "Sieb des Eratosthenes". Da wird nen gute methode beschrieben.**
ich denke fuer den anfang ist das Sieb etwas uebertrieben!
Ich wuerde lieber einmal die simple Primzahlenberechnung zum laufen bringen und danach etwas optimieren...
schliesslich wollen wir hier nicht primzahlenberechnen sondern ueben
-
Die nächsten optiemierungen währen dann:
- nur prüfen auf division durch bereits gefundene Primzahl
- prüfen nur bis maximal zur Wurzel der zu testenden Zahl
Hab letztes ein prog geschrieben was alle Primzahlen bis 2³²-1 sucht geschriben wenn du willst kann ich es dir zukommen lassen.
mfg
-bg-
-
Ich hab' mir vor ein paar Monaten mal Gedanken über die ganze Sache gemacht: http://www.ts-networld.de/progc/prime.shtml
-
thx. Der Fehler mit dem durchzählen war wirklich sehr dumm (Es lebe die for-Schleife ). Ich werde mal morgen was dazu googlen. Bin spät dran.
cu
[ Dieser Beitrag wurde am 28.11.2002 um 17:23 Uhr von elk editiert. ]