Primzahlen Ausgeben

Hi.

Man kann bei euren Programmen noch einiges optimieren bzw. verbessern. Zum einen betrifft das die Übersichtlichkeit. Auch ist es nicht notwendig alle Zahlen von 2 bis n - 1 zu prüfen. Es reicht die 2 und dann alle ungeraden Zahlen von 3 bis zur "oberen Grenze". Was die obere Grenze ist, das solltet ihr euch evtl. mal selbst überlegen.

@DarKo Warum verwendest du da plötzlich "double"?

Bei Verwendung einer Funktion wird das Programm viel übersichtlicher:

C:
int main(void) {
    int i, zahl=0;

    for (i=1; i <= 10; ++zahl) {
        if (isPrime(zahl)) {
            printf("%d >> %d\n", i++, zahl);
            fflush(stdout);
        }
    }
}
Gruß
 
@ DarKo87
Musst du den Weg über dieses (if prim_z) gehen?

Code:
               if(erg==0){
                prim_z=0;
                break;
            } else {
                prim_z=1;
            }
        }
        if(prim_z==1){
            printf("%d >> %d\n", prim, i);
            fflush(stdout);
            prim++;
            }
        }

Dieses Ganze könnte man doch schlanker halten.

Code:
               if(erg==0){
                break;
            } else {
              printf("%d >> %d\n", prim, i);
            fflush(stdout);
            prim++;
            }        
        }

Ich hoffe, ich habe alle Klammern erwischt^^ Indem du diese Variablenzuweisung von prim_z weg lässt und gleich die Folgen davon beschreibst, sparst du dir diesen Umweg zum Ziel.

@deepthroat

Wenn du gleich mit der % 2 anfängst, sortieren sich ja nach dem ersten Schritt automatisch die geraden Zahlen aus. Und wenn man die ganze Prüfung der Zahl X abbricht, sobald man auf eine 0 stößt, geht es recht zügig vorran. Eine Liste um die 20000 -> 21500 (die Grenzen eben wegen der Anzeigbarkeit ALLER Variablen im Konsolenfenster) rattert binnen einer Sekunde durch. Einzige was ich bei mir noch zu verbessern hätte, wär die Überlegung nur bis zur Hälfte zu prüfen, da nach der Hälfte soweit mich meine Logik nicht im Stich lässt ohnehin keine komplette Zahl mehr raus kommt.

Oder ich rede gerade an dir vorbei.
 
Zuletzt bearbeitet:
Wenn du gleich mit der % 2 anfängst, sortieren sich ja nach dem ersten Schritt automatisch die geraden Zahlen aus.
Ja, natürlich. Aber das kostet Zeit und ist unnötig. Der Unterschied zwischen O(n²) und O(n log n) ist schon gewaltig.
Und wenn man die ganze Prüfung der Zahl X abbricht, sobald man auf eine 0 stößt, geht es recht zügig vorran. Eine Liste um die 20000 -> 21500 (die Grenzen eben wegen der Anzeigbarkeit ALLER Variablen im Konsolenfenster) rattert binnen einer Sekunde durch.
Das sind ja auch nicht viele... und vermutlich auch keine großen Zahlen.
Einzige was ich bei mir noch zu verbessern hätte, wär die Überlegung nur bis zur Hälfte zu prüfen, da nach der Hälfte soweit mich meine Logik nicht im Stich lässt ohnehin keine komplette Zahl mehr raus kommt.
Ja, das ist schon ganz gut. Aber es geht noch viel besser. Überleg dir mal wie zwei Faktoren a und b beschaffen sind wenn gilt a * b ? c. Und was mit b passiert wenn du den Faktor a inkrementierst.

Gruß
 
Zurück