Question

Je dois écrire un programme C pour trouver le nombre parfait ..

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)) -. Ceci est la ligne d Je ne comprends pas

S'il y a une autre méthode simple, ne s'il vous plaît me suggérer

Était-ce utile?

La solution

if(!(num%i)) signifie simplement if( (num%i) == 0 )

Autres conseils

Si vous êtes à la recherche d'un moyen de trouver plus efficace les nombres parfaits, vous pouvez lire la page Wikipedia sur les nombres parfaits . Vous y trouverez qu'il n'y a pas de chiffres connus parfaits impairs (et en utilisant votre méthode, vous n'allez trouver) et que tous les nombres parfaits pairs sont de la forme:

2^(p - 1)*(2^p - 1)2^p - 1 est premier et donc p est premier. Ainsi, si vous voulez trouver même les nombres parfaits vérifier la primalité de 2^p - 1 pour tous les nombres premiers p, le cas échéant 2^(p - 1)*(2^p - 1) est parfait.

Si vous voulez juste trouver quelques petits nombres parfaits en utilisant une boucle simple, vous pouvez faire votre approche plus efficace en faisant remarquer que si i divise num, le fait num / i. C'est, il suffit de boucle jusqu'à la racine carrée de num et ajouter des paires i et num / i à sum. Notez que si num est carrée, la racine carrée de num doit être ajouté qu'une seule fois.

Notez que si vous calculez sum de cette façon, sa valeur sera 2 * num pour les nombres parfaits, pas num.

moyens de num % i "num modulo i"; elle renvoie le rappel de la division des nombres (d'où un nombre compris entre 0 et i-1).

En C, 0 est faux et tous les autres numéros sont vraies, si les tests de !(num % i) si "num modulo i" est égal à zéro, ou en mathématiques-parler ordinaire, si num est divisible par i.

façon très simple, les contrôles de code if(!(num%i)) que si la valeur de num est divisé par i et il retourne si reste est 0 ou non ... D'où l'opérateur de module% est utilisé ici pour le reste .. ce morceau de code est similaire à if(num % i==0). si elle retourne vrai, alors la valeur de i doit être ajoutée à la somme. Enfin, si la valeur de somme est égale à la valeur de num, le nombre est parfait et le numéro est affiché!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top