Pregunta

Tengo que escribir un programa en C para encontrar el número perfecto ..

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)) -. Esta es la línea d No entiendo

Si hay algún otro método simple no por favor me sugieren

¿Fue útil?

Solución

if(!(num%i)) simplemente significa if( (num%i) == 0 )

Otros consejos

Si usted está buscando una manera más eficiente para encontrar los números perfectos, es posible que desee leer la página Wikipedia sobre los números perfectos . En ella se encuentra que no hay son conocidos los números perfectos impares (y usando su método no va a encontrar ninguna) y que todos los números pares perfectos son de la forma:

2^(p - 1)*(2^p - 1) donde 2^p - 1 es primo y por lo tanto p es un número primo. Por lo tanto, si usted quiere encontrar los números perfectos pares comprobar la primalidad de 2^p - 1 para todos los números primos p, de ser así 2^(p - 1)*(2^p - 1) es perfecto.

Si lo que desea es encontrar unos pequeños números perfectos usando un bucle simple que puede hacer que su enfoque más eficiente haciendo notar que si se divide i num, también lo hace num / i. Es decir, es suficiente con bucle hasta la raíz cuadrada de num y añadir pares i y num / i a sum. Tenga en cuenta que si num es cuadrado, la raíz cuadrada de num se tiene que añadir sólo una vez.

Tenga en cuenta que si se calcula sum de esta manera, su valor será 2 * num de los números perfectos, no num.

medios num % i "num modulo i"; devuelve el recordatorio de la división de los números (por lo tanto, un número entre 0 y i-1).

En C, 0 es falsa y todos los demás números son verdad, así pruebas !(num % i) si "num modulo i" es cero, o en la llanura matemáticas-hablar, si num es divisible por i.

En forma muy simple, el código comprueba if(!(num%i)) que si el valor de num está dividido por i y devuelve si resto es 0 o no ... Por lo tanto el operador módulo% se utiliza aquí para encontrar el resto .. esto pieza de código es similar a if(num % i==0). si devuelve cierto, entonces el valor de i se debe añadir con suma. Por último, si el valor de la suma es igual al valor de num, el número es perfecto y se muestra el número!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top