Perfekte Zahlen berechnen



  • Hallo,
    ich will ein Programm schreiben, welches perfekte Zahlen berechnet.
    Hierzu habe ich in diesem Forum bereits einen Theard gefunden in dem ein Code gepostet ist(https://www.c-plusplus.net/forum/25133-full) welcher funktioniert, meiner funktioniert aber nicht.
    Mein Code ist zwar etwas umständlicher, sollte aber eigentlich das gleiche bewirken.

    Kann mich bitte mal jemand aufklären wo der Fehler liegt.

    Danke im Vorraus.

    short zahl,rest,teiler,i;
    teiler=0;
    zahl=0;
    i=0;
    while(zahl<10000)
    {
    zahl=zahl+1;

    while(teiler<zahl )
    {
    teiler=teiler+1;
    rest=zahl%teiler;
    if(rest==0)
    {i=i+teiler;
    }}
    if(zahl==i)
    {
    std:cout<<zahl;}
    }



  • Das Problem liegt an fehlenden Codetags (schreibe deinen Code zwischen

    und
    

    ), fehlender genauer Fehlerbeschreibung sowie die fehlende vorherige Benutzung des Debuggers. 😉 Welche IDE benutzt du denn? (CodeBlocks, VisualStudio etc)



  • dev c++



  • Kann mich bitte mal jemand aufklären wo der Fehler liegt.

    Welcher Fehler?
    Du musst schon beschreiben, was nicht passt. Wir ziehen dir ja nicht jedes Wort aus dem Mund.



  • Wenn ich das Programm starte steht dort einfach eine 1.
    Wenn ich das andere Programm starte erscheinen die zahlen 6, 28, 496 und 8128, also die perfekten Zahlen bis 10000.



  • xxmagnum schrieb:

    dev c++

    War eigentlich klar bei so schlechtem Code. Tu Dir einen Gefallen und hol Dir ein gutes Buch.

    Minimale Änderungen
    short zahl,rest,teiler,i;
    //teiler=0;//hier weg
    zahl=0;
    //i=0;//hier weg
    while(zahl<10000)
    {
    zahl=zahl+1;
    teiler=0;//hier hin
    i=0;//hier hin

    while(teiler<zahl-1 )//-1 ist neu
    {
    teiler=teiler+1;
    rest=zahl%teiler;
    if(rest==0)
    {i=i+teiler;
    }}
    if(zahl==i)
    {
    std::cout<<zahl<<'\n';}//:: statt : //'\n' dazu
    }

    Ausgabe
    6
    28
    496
    8128



  • Danke, ich verstehe zwar nicht ganz warum man da noch -1 rechen muss, aber jetzt funktionierts^^



  • xxmagnum schrieb:

    Danke, ich verstehe zwar nicht ganz warum man da noch -1 rechen muss

    Weil Du "teiler=teiler+1;" machst BEVOR Du in der Schleife den teiler benutzt. Dadurch ist er immer schon eins weiter als der Schleifenkopf denkt.
    Dadurch nimmste bei zum Beispiel 6 nicht nur die Teiler 1,2,3, sondern auch den fetten trivialen Teiler 6 mit.



  • xxmagnum schrieb:

    Hallo,
    ich will ein Programm schreiben, welches perfekte Zahlen berechnet.

    Les dir den Artikel über die perfekte Zahlen auf wikipedia durch. Da wird du schon bei der 7 Zahl probleme bekommen. Dort wirst du auch die relativ einfache Formel finden: 2(p−1)*(2p − 1) wobei p Primzahl

    Damit kannst du gleich die ersten paar perfekte Zahlen konstruieren.


Anmelden zum Antworten