Twin primes



  • Hallo,
    ich soll in c++ ein Programm schreiben, dass alle Primzahl-paare von 0 bis 1000 auflistet, die sich um 2 unterscheiden (z.B. 3,5). Ich soll zuerst mit einer Funktion isPrime(int a) überprüfen, ob eine Zahl eine Primzahl ist und diese anschließend in der main Funktion aufrufen. Die isPrime Funktion soll dabei, wenn sie nicht zutrifft mit einem break beendet werden.
    Ich habe eine funktionierende Funktion, die Primzahlen auswirft, aber ich darf nur die bisher gelernten Mittel verwenden. Das heißt nur Schleifen, Bedingungen etc. , nichts mit memset oder anderen Bibliotheken als iostream und cmath.
    Es wäre toll, wenn mir jemand helfen könnte,
    liebe Grüße
    Katharina.



  • Und? Wo ist Dein Problem? Du hast keine Frage gestellt.



  • @KathiJ

    Die isPrime Funktion soll dabei, wenn sie nicht zutrifft mit einem break beendet werden.

    Nein, sicher nicht.



  • @manni66 sagte in Twin primes:

    Nein, sicher nicht.

    ist sicher nur unglücklich formuliert.



  • @Swordfish sagte in Twin primes:

    @manni66 sagte in Twin primes:

    Nein, sicher nicht.

    ist sicher nur unglücklich formuliert.

    Wenn es nur in deutsch und nicht in C++ unglücklich formuliert ist ...



  • @KathiJ sagte in Twin primes:

    nichts mit memset oder anderen Bibliotheken als iostream und cmath.

    Und mir wäre jetzt auch nicht klar, wozu ich memset oder irgendwelche weiteren Bibliotheken für Primzahlberechnung brauchen sollte.

    Wo ist denn das Problem?



  • @KathiJ

    IsPrime:
         für alle i von 0 bis primzahlkandidat:
              wenn primzahlkandidat durch i teilbar:
                   return keine primzahl
    
         return primzahl
    
    main:
         für alle i von 0 bis 1000:
              IsPrime für i aufrufen
              wenn i ist eine primzahl:
                   IsPrime für (i + 2) aufrufen
                   wenn (i + 2) ist eine primzahl:
                        i und (i + 2) auf dem bildschirm ausgeben
    

    achtung: das programm enthält noch einen sehr gravierenden fehler, auf den du selbst kommen musst (lerneffekt).


  • Mod

    Das kriegen wir aber auch besser hin, ohne die fast gleiche Rechnung über 1000x zu wiederholen. Wir wissen ja schon, dass wir alle Zahlen bis 1000 prüfen müssen. Wenn es doch bloß irgendeine berühmte Methode für solche Fälle gäbe…

    Wobei das effizienteste natürlich so etwas wie

    cout << "(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), …";
    

    wäre 🙂



  • @Wade1234 sagte in Twin primes:

    [...] i von 0 bis primzahlkandidat
    

    echt jetzt!??



  • @Wade1234 sagte in Twin primes:

    @KathiJ

    IsPrime:
         für alle i von 0 bis primzahlkandidat:
              wenn primzahlkandidat durch i teilbar:
                   return keine primzahl
    
         return primzahl
    

    Im Bereich bis 1000 spielt Geschwindigkeit keine Rolle, aber grundsätzlich wird es wesentlich schneller, wenn man nur durch alle bisher gefundenen Primzahlen teilt, die kleiner als Wurzel aus Primzahlkandidat sind.



  • @Belli trwtf ist i von 0 ...



  • Jau 😄
    DAS hab ich gar nicht richtig bewertet ...



  • @SeppJ sagte in Twin primes:

    Das kriegen wir aber auch besser hin, ohne die fast gleiche Rechnung über 1000x zu wiederholen. Wir wissen ja schon, dass wir alle Zahlen bis 1000 prüfen müssen. Wenn es doch bloß irgendeine berühmte Methode für solche Fälle gäbe…

    ach die ist bestimmt so alt, dass die gar nicht mehr funktioniert.

    Wobei das effizienteste natürlich so etwas wie

    cout << "(3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43), (59, 61), (71, 73), (101, 103), (107, 109), (137, 139), …";
    

    wäre 🙂

    da fällt mir ein witz ein: ein mathematiker, ein physiker und ein ingenieur wollen herausfinden, wer am schnellsten die lösung von "1+1" herausfinden kann. der physiker verschwindet in seinem arbeitszimmer, nach einer woche kommt er wieder raus und sagt: "das ergebnis befindet sich irgendwo zwischen 1,9 und 2,1." Als nächstes geht der mathematiker in sein arbeitszimmer, nach 2 wochen kommt er wieder raus und sagt: "das ergebnis befindet sich zwischen 1,99 und 2,01."
    zum schluss geht der ingenieur in sein arbeitszimmer, nach 2 minuten kommt er wieder raus und sagt: "das ergebnis ist 2." die beiden anderen wollen natürlich wissen, wie er so schnell zu der genauen lösung gekommen ist. antwort: "habe ich im tabellenbuch nachgelesen." 🙄

    @Swordfish sagte in Twin primes:

    @Wade1234 sagte in Twin primes:

    [...] i von 0 bis primzahlkandidat
    

    echt jetzt!??

    oller spielverderber.😕



  • Ich schlage einen anderen Algorithmus vor.

    1. Nach Eratosthenes googlen.
    2. Ergeblislinks durchlesen und verstehen.
    3. Ausprogrammieren.
    4. Jetzt noch überlegen, wie man an die Twins kommt.

    Bei Fragen zu den einzelnen Schritten gerne nachfragen.


Log in to reply