me diste algo que investigar, estuve viendo la progesion completa (sin importar si eran primos o no) en binario y son muy simple en ese aspecto... pero me da un error que no descubro la razón
El problema es que solo presentas la salida del programa, sin el código fuente no es posible conocer la causa del error (imagino tiene que ver con tu otra duda).
para ser sincero se que el metodo 2 necesita casting de tipo, pero no estoy seguro por que
El segundo metodo es:
long unsigned int numero_perfecto_metodo2(int primo)
{
unsigned long int resultado;
resultado = (unsigned long int) ((1 << primo) - 1) << (primo - 1);
return resultado;
}
El cual se puede abreviar a:
long unsigned int numero_perfecto_metodo2(int primo)
{
return ((1 << primo) - 1) << (primo - 1);
}
El problema ahí es la primera literal 1, esta es de tipo signed int y puede, dependiendo del desplazamiento, generar un numero negativo. Para solucionarlo lo mas fácil es indicar que el tipo de ella es unsigned long mediante sufijos: 1UL.
Un saludo