Frage

Ich muss ein C -Programm schreiben, um die perfekte Nummer zu finden.

main()
{
    int n=1000,sum = 0;
    for(int num = 1; num <= n; num++)
    {
        sum = 0;
        for(int i = 1; i < num; i++)
        {
            if(!(num%i))
            {
                sum+=i;
            }
        }
        if(sum == num)
            printf("\n%d",num);
    }
}

if(!(num%i)) - Dies ist D -Linie, die ich nicht verstehe.

Wenn es eine andere einfache Methode gibt, schlagen Sie mir bitte vor

War es hilfreich?

Lösung

if(!(num%i)) bedeutet einfach if( (num%i) == 0 )

Andere Tipps

Wenn Sie nach einer effizienteren Möglichkeit suchen, perfekte Zahlen zu finden, möchten Sie das möglicherweise lesen Wikipedia -Seite auf perfekten Zahlen. Darin werden Sie feststellen, dass es keine seltsamen perfekten Zahlen gibt (und mit Ihrer Methode keine finden werden) und dass alle sogar perfekten Zahlen die Form haben:

2^(p - 1)*(2^p - 1) wo 2^p - 1 ist Prime und deshalb p ist eine Prime. Wenn Sie also auch perfekte Zahlen finden möchten, überprüfen Sie die Primalität von 2^p - 1 für alle Primzahlen p, wenn ja 2^(p - 1)*(2^p - 1) ist perfekt.

Wenn Sie nur ein paar kleine perfekte Zahlen mit einer einfachen Schleife finden möchten, können Sie Ihren Ansatz effizienter gestalten, indem Sie feststellen, dass wenn i teilt num, auch num / i. Das heißt num und Paare hinzufügen i und num / i zu sum. Beachten Sie, dass wenn num ist quadratisch, die quadratische Wurzel von num muss nur einmal hinzugefügt werden.

Beachten Sie, dass wenn Sie berechnen sum Auf diese Weise wird es Wert sein 2 * num für perfekte Zahlen, nicht num.

num % i bedeutet "num Modulo i "; es gibt die Erinnerung an die Aufteilung der Zahlen zurück (daher eine Zahl zwischen 0 und i-1).

In C ist 0 falsch und alle anderen Zahlen sind wahr, also !(num % i) Tests, wenn "num modulo i" Null oder in einfachem Mathematik ist, wenn Num durch i gleichmäßig teilbar ist.

Auf sehr einfache Weise die if(!(num%i)) Code prüft, dass, wenn der Wert der Num durch i geteilt wird und es zurückgibt, wenn der Rest 0 ist oder nicht ... Daher der Modul -Operator % hier verwendet wird, um den Rest zu finden. Dieser Code ist ähnlich wie if(num % i==0). Wenn es true zurückgibt, sollte der Wert von Ich mit Summe hinzugefügt werden. Wenn der Wert der Summe gleich dem Wert der Num entspricht, ist die Zahl perfekt und die Zahl wird angezeigt!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top