Domanda
ho bisogno di scrivere un programma C per trovare il numero perfetto ..
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))
-. Questo è d linea che non capisco
Se c'è qualche altro metodo semplice fai per favore mi suggeriscono
Soluzione
if(!(num%i))
significa semplicemente if( (num%i) == 0 )
Altri suggerimenti
Se siete alla ricerca di un modo più efficiente per trovare numeri perfetti, si potrebbe desiderare di leggere la pagina Wikipedia sui numeri perfetti . In essa troverete che non c'è sono noti numeri perfetti dispari (e utilizzando il metodo non si ha intenzione di trovare qualsiasi) e che tutti i numeri anche perfetti sono della forma:
2^(p - 1)*(2^p - 1)
dove 2^p - 1
è primo e quindi p
è un numero primo. Pertanto, se si vuole trovare anche i numeri perfetti verificare la primalità di 2^p - 1
per tutti i numeri primi p
, in caso affermativo 2^(p - 1)*(2^p - 1)
è perfetto.
Se si vuole solo trovare un paio di piccoli numeri perfetti utilizzando un semplice ciclo è possibile rendere il vostro approccio più efficiente notando che se divide i
num
, così fa num / i
. Che è, devi solo ciclo fino alla radice quadrata di num
e aggiungere coppie i
e num / i
a sum
. Si noti che se num
è quadrata, la radice quadrata di num
deve essere aggiunta una sola volta.
Si noti che se si calcola sum
in questo modo, il suo valore sarà 2 * num
per i numeri perfetti, non num
.
mezzi num % i
"num modulo i"; restituisce il resto della divisione dei numeri (quindi, un numero compreso tra 0
e i-1
).
In C, 0 è falso e tutti gli altri numeri sono vere, quindi i test !(num % i)
se "num Modulo I" è pari a zero, o in pianura matematica-parlare, se num è divisibile per i.
In modo molto semplice, il codice if(!(num%i))
verifica che se il valore di num è diviso per i e restituisce se resto è 0 o no ... Da qui la l'operatore modulo% viene utilizzato qui per trovare il resto .. questo pezzo di codice è simile a if(num % i==0)
.
se restituisce vero allora il valore dei deve essere aggiunto con somma. Infine, se il valore della somma è pari al valore di num, il numero è perfetto e viene visualizzato il numero!