bool in if



  • Hallo,

    ich suche eine best. Zahlenfolge ungerader Zahlen:

    Die Bedingungen sind:
    1. pz;
    2. 1. Primteiler = 3;
    3. 1. PT = 13;
    4. 1. PT = 17;
    5. 1. PT = 3;
    6. PZ

    ich hab eine for-Schleife mit 6 er Schritten, damit ich schonmal die 2 und 4 Stelle bestimmt habe, denn nur dort kann sowas vorkommen.

    for (int i=3; i<=1000;i=i+6)
    

    und dann ein if mit

    if((i+2)%13==0 && (i+4)%17==0)
    

    Jetzt fehlt mir noch die Bedingung, daß i-1 und i+8 Primzahlen sein müssen.
    Dazu hab ich eine Primzahlfunktion:

    bool prim(int n){
        int x;
        if(n<2) return false;
        if(n==2) return false;
        if(n%2==0) return false;
        for(x=3;x<=sqrt(n);x+=2){
            if(n%x==0)
                return false;
        }
        return true;
    }
    

    Wie kann ich die Funktion in das if einbauen? Danke ...



  • Genauso wie du bereits die anderen Bedingungen verknüpfst:

    if( ... && prim( i -1 ) && prim( i + 8 ) )
    {
       ...
    }
    


  • otto56 schrieb:

    Wie kann ich die Funktion in das if einbauen? Danke ...

    AUTSCH! 😮



  • otto56 schrieb:

    bool prim(int n){
        if(n==2) return false;
    }
    

    2 ist eine Primzahl. Daher ist entweder der Funktionsname oder deine Funktion falsch.

    Und die Wurzel solltest du einmal vorher berechnen und nicht in der Schleifenbedingung.



  • Danke, es funzt, vielen dank für den schnellen direkten Tip!

    kannst Du mir noch sagen, warum mein Swift case nicht funzt?

    bool (c) = prim(i-2);
                    switch (c)
                    {
    
                        //case true: std::cout<<nr<<". "<<i-2<<" PZ\n";
                       // case false: std::cout<<nr<<". "<<i-2<<" = i-2 = uNPZ"<<"\n";
                    }
    


  • wob schrieb:

    2 ist eine Primzahl. Daher ist entweder der Funktionsname oder deine Funktion falsch.

    weiss ich auch, aber mich interessieren nur ungerade Primzahlen ...

    wob schrieb:

    Und die Wurzel solltest du einmal vorher berechnen und nicht in der Schleifenbedingung.

    Wieso das?



  • otto56 schrieb:

    wob schrieb:

    Und die Wurzel solltest du einmal vorher berechnen und nicht in der Schleifenbedingung.

    Wieso das?

    Wurzel ziehen ist teuer. Und so wie du das machst, wird die Wurzel in jedem Schleifendurchlauf berechnet.

    Zu deinem Switch Case:
    Angenommen die Sachen wären nicht auskommentiert, dann fehlern dem die breaks.



  • otto56 schrieb:

    Jetzt fehlt mir noch die Bedingung, daß i-1 und i+8 Primzahlen sein müssen.

    Das ist doch nie der Fall. Wenn i gerade ist ist i+8 auch gerade und niemals prim. Wenn i ungerade ist ist i -1 gerade und niemals prim. Für deine Anwendung gibt es nur ein i (3), weil 2 für dich keine Primzahl ist. Damit brauchst auch nix mehr zu rechnen und kannst konstant 3 einsetzen.



  • otto56 schrieb:

    wob schrieb:

    2 ist eine Primzahl. Daher ist entweder der Funktionsname oder deine Funktion falsch.

    weiss ich auch, aber mich interessieren nur ungerade Primzahlen ...

    Deswegen schrieb ich ja, dass entweder der Funktionsname oder deine Funktion falsch ist. Wenn letztere korrekt ist, ist der Funktionsname falsch. Nenne die Funktion also besser isOddPrime oder ähnlich.



  • [quote="DocShoe"]

    otto56 schrieb:

    Jetzt fehlt mir noch die Bedingung, daß i-1 und i+8 Primzahlen sein müssen.

    Du hast recht, das hängt damit zusammen, daß ich grundsätzlich nur die ungeraden zahlen betrachte und auch so programmiere, das hat ich für diesen Thread vergessen anzupassen ...



  • Das ändert doch nix... für alle ungeraden Zahlen Z kann Z-1 nie prim sein.

    Edit:
    In deinem Fall mit der Ausnahme für 3, da du 2 nicht als Primzahl behandelst.



  • Was hat das jetzt noch mit dem thema tun? Otto ist mathematisch leider genau so unbegabt wie in Programmierung. Seit Wochen stümpert er mit seinen Primzahlen da rum... da fällt mir ein, das passt doch fantastisch zu einem bislang noch ungelösten Problem: "Gibt es unendlich viele Primzahlzwillinge? Oder gar Primzahlvierlinge oder Primzahlsechslinge?"
    Come on Otto, das schaffst du 😃


Log in to reply