[Gelöst] Primzahlen pärchen



  • Hallo!
    Also bin hier neu im Forum und hoff mal ich mach alles richtig. 🙂
    Als erstes. Meine Aufgabe ist: Es werden 2 zahlen eingegeben und zwischen den zahlen soll ich die Primzahlen finden und dann die Primzahl pärchen ausgeben deren differenz 2 ist. (Ich entschuldige mich, dass ich mich vielleicht unklar ausdrücke, aber komme nicht aus Deutschland :D)
    Hier mein Code:

    #include <iostream>
    
    using namespace std;
    
    bool isPrime(int n)
    {
        for(int i=2; i<n ; i++)
        {
            if (n % i==0) return false;
        };
        return true;
    };
    
    int main()
    {
        int m, n;
        cout << "Ievadit intervalu:" << endl;
        cin >> m >> n;
    
        for(int i = m; i < n; i++)
        {
            for(int k = m; k < n; k++)
        {
            if (isPrime(i) && isPrime(k))
                cout << i << ":" << k << endl;
        }
        }
    
        return 0;
    }
    

    Mein problem ist wohl, dass ich die ausgabe nicht hinkrieg. Bin neu im programmieren, und mir fällt nicht ein was ich grad falsch mache. Vielleicht ist auch das ende totaler mist. 😃
    Hoffe mir kann jemand einfach erklären was ich falsch mache! 🙂



  • Die Ausgabe sieht OK aus. Ich vermute eher, dass dein Programm so viele Pärchen von Zahlen testet, dass es ewig dauert bis die erste Ausgabe kommt. Eigentlich braucht man hier auch gar keine zwei verschachtelten Schleifen. Wenn Pimzahlpärchen gesucht werden kann man das viel einfacher so machen:

    for(int i = m; i < n; i++)
    {
        if (isPrime(i) && isPrime(i+2))
            cout << i << ":" << i+2 << endl;
    }
    


  • sebi707 schrieb:

    Die Ausgabe sieht OK aus. Ich vermute eher, dass dein Programm so viele Pärchen von Zahlen testet, dass es ewig dauert bis die erste Ausgabe kommt. Eigentlich braucht man hier auch gar keine zwei verschachtelten Schleifen. Wenn Pimzahlpärchen gesucht werden kann man das viel einfacher so machen:

    for(int i = m; i < n; i++)
    {
        if (isPrime(i) && isPrime(i+2))
            cout << i << ":" << i+2 << endl;
    }
    

    Ah super, danke! Weiss nicht wieso ich 2 Schleifen rein machen wollte. 😃



  • So hast du eine Schleife (von m bis n) in der zweimal (mit einer Schleife) geprüft wird, ob die Zahlen prim sind.

    Mal abgesehen von den anderen optimierungen für den Primzahltest, würde eine Schleife reichen.
    Du musst dir nur die vorhergehende Primzahl merken und prüfen ob die Differenz zur neuen Primzahl passt.


Anmelden zum Antworten