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

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top