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
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)
où 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é!