Primzahlen



  • Hallo ich habe die Aufgabe Primzahlen auszugeben.

    So lautet die genaue Aufgabe:

    Schreibe eine C-Funktion, welche alle Primzahlen zwischen 2 und 100 ausgibt. Gehe dafür wie folgt vor: Zuerst wird ein Array mit den zahlen 2,3,4....100 initialisiert. Beginnend mit der 2 werden lle Vielfachen der zuletzt gefundenen Primzahl makiert (gleich 0 gesetzt). Die neue Primzahl ist die nächste unmarkierte Zahl. Ist das Quadrat der zuletzt gefundenen Primzahl größer als 100, so enthält das Array bereits alle gesuchten Primzahlen.

    So habe ich angefangen:

    #include <stdio.h>
    
    int main () 
    {
      int j[97] = {0};
      int i=2;
      for (i=2 ; i < 98 ; i++)
        j[i]=i;
    
    }
    

    Also bis jetzt nur das Array initialisiert.

    So nun meine gedankengang den ich nicht so richtig in Programmiersprache umschreiben kann.

    Er soll das erste Element des Arras nehmen also die 2. Jetzt teil ich mit dem Modulo operator jede nachfolgende Zahl durch das Element...wenn Modul 0 ergibt dann soll das Element =0 gesetzt werden.

    Dann nimmt er sich das nächste Element und macht das selbe...Sollte ein folgendes Element = 0 sein dann lässt er es aus und macht mit dem nächsten weiter.

    Ist das eine halbwegs intelligente vorrangehensweiße?

    Wie kann ich das programmieren? Habe grad nich so den Plan 😞

    Danke

    Edit: Mir is grad noch eine viel Schlauere Möglichkeit eingegfallen:

    Nehme das erste Elemnt also die 2. Und dann gehe die Vielfachen durch also mache 2*2=4 4 ist das Element auf der Stelle 3 des Arrays also setze stelle 4-1=0 4 Minus eins weil die Stelle ja immer ein unter dem Wert der Zahl liegt....also 10 liegt auf 9 usw... Ist das besser? Und wie macht man das?



  • Schau dir mal die Animation und den Text an: http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes



  • Ok dann war mein 2. Gedanke besser...trozdem weiß ich nicht wie man das Programmiert 😞



  • Es ist in dem Artikel doch sogar eine Beispielimplementierung, die zeigt wie man es programmiert. Das brauchst du nur noch in C umschreiben und an die Eigenheiten deiner Aufgabe anpassen. Woran harpert es denn da noch?



  • Bei den Arrays...hat jemand ne Seite oder ne Hilfe wo Arrays nochmal gut erklärt werden? 😞





  • Odatas schrieb:

    #include <stdio.h>
    
    int main () 
    {
      int j[97] = {0};
      int i=2;
      for (i=2 ; i < 98 ; i++)
        j[i]=i;
        
      
      
      
    }
    

    Also bis jetzt nur das Array initialisiert.

    Das ist schon mal ganz ... schlecht. Dein Array hat 97 Einträge, für die Zahlen von 2, 3 ..., 100 bräuchte es aber 99 Einträge.
    Die 97 Einträge, die es hat, erreichst Du mit den Indizes 0 - 96. Deine Schleife beschreibt aber auch den nicht vorhandenen Eintrag mit dem Index 97. Das kann irgendwann zu merkwürdigem Verhalten Deines Programmes bis hin zum Absturz führen.
    Die ersten beiden Array-Einträge werden von Dir überhaupt nicht belegt, bzw. behalten den Wert 0.



  • Schei.. auf die beide ersten Einträge und mach ein prim[100] oder prim[101] wenn du wirklich bis 100 gehen willst.
    Und dann steht prim[11] auch für die Zahl 11 ohne große Verrenkungen.

    In der Aufgabe steht aber auch "zwischen 2 und 100" was ja 3 bis 99 bedeutet 😃



  • DirkB schrieb:

    In der Aufgabe steht aber auch "zwischen 2 und 100" was ja 3 bis 99 bedeutet 😃

    Zeig ma genau, wo das steht.



  • Belli schrieb:

    DirkB schrieb:

    In der Aufgabe steht aber auch "zwischen 2 und 100" was ja 3 bis 99 bedeutet 😃

    Zeig ma genau, wo das steht.

    Erster Satz der Aufgabenstellung. Solange man den Rest dahinter ignoriert, stimmt das schon. 😃



  • Dieser Satz hat aber mit dem Array überhaupt nix zu tun ...



  • Belli schrieb:

    Dieser Satz hat aber mit dem Array überhaupt nix zu tun ...

    DirkB hat auch gar nix vom Array gesagt. :p



  • _matze schrieb:

    DirkB hat auch gar nix vom Array gesagt. :p

    Soso, gar nix ...

    DirkB schrieb:

    Schei.. auf die beide ersten Einträge und mach ein prim[100] oder prim[101] wenn du wirklich bis 100 gehen willst.
    Und dann steht prim[11] auch für die Zahl 11 ohne große Verrenkungen.



  • Genau, gar nix:

    DirkB schrieb:

    In der Aufgabe steht aber auch "zwischen 2 und 100" was ja 3 bis 99 bedeutet 😃

    (da war ein Absatz 😃 )
    :p

    Back to topic...



  • 🙄 Ich möchte ein 🤦 haben.

    ~Trotzdem: Danke _matze~



  • _matze schrieb:

    Genau, gar nix:

    DirkB schrieb:

    In der Aufgabe steht aber auch "zwischen 2 und 100" was ja 3 bis 99 bedeutet 😃

    (da war ein Absatz 😃 )

    Das hat der Threadersteller ja gar nicht geschrieben.
    (da war ein Absatz)
    Edit: Und um die Sache jetzt mal zu Ende zu bringen:
    DirkB bezog sich auf mein Posting:

    DirkB schrieb:

    Schei.. auf die beide ersten Einträge und mach ein prim[100] oder prim[101]

    In der Aufgabenstellung heißt es aber:
    "Gehe dafür wie folgt vor: Zuerst wird ein Array mit den zahlen 2,3,4....100 initialisiert."

    Okay?



  • Das "Zuerst wird ein Array mit den zahlen 2,3,4....100 initialisiert." sagt ja nicht aus, wie viele Element das Array hat.

    Wenn der TO den Algorithmus im Griff hat, kann er sich Gedanken machen wie er das Array indizieren muss, damit er auf die Einträge 0 und 1 verzichten kann und mit 2 beginnt.



  • DirkB schrieb:

    Das "Zuerst wird ein Array mit den zahlen 2,3,4....100 initialisiert." sagt ja nicht aus, wie viele Element das Array hat.

    Naja, wenn es aber mehr Einträge haben soll, womit sollen die überflüssigen initialisiert werden? Wie gesagt, als Initialisierungswerte sind die Zahlen 2 bis 100 vorgegeben.



  • Herrje, Belli, was dir an Humor fehlt, machst du an überschüssiger Zeit wieder wett, was. 🙄 :xmas1:



  • Belli schrieb:

    Naja, wenn es aber mehr Einträge haben soll, womit sollen die überflüssigen initialisiert werden?

    Er soll sie gar nicht benutzen. Weder lesend noch schreibend.

    Es soll dabei helfen den Index in den Griff zu bekommen.
    Wenn er die Zahl 11 meint, soll auch der Index 11 sein. Ganz einfach.


Anmelden zum Antworten