Ti consiglio prima di tutto di prenderti un buon libro oppure di farti assumere in una ditta come esperto di code obfuscation, perchè il tuo programma è abbastanza illeggibile
Ho provato a fare una mia versione (sembra funzionare) che puoi analizzare.
Non ho scritto commenti perchè è meglio se mi chiedi tu cosa non capisci!
codice:
/* Calolo dei numeri perfetti */
#include <stdio.h>
#include <math.h>
bool isperfect(int n);
int main()
{
int k;
for(k=2; k<100; k++)
{
if(isperfect(k))
printf("%d e' un numero perfetto.\n", k);
else
printf("%d non lo e'.\n", k);
}
return 0;
}
bool isperfect(int n)
{
int i, tot = 0, actual_n = n;
for(i=2; actual_n > 1;)
{
if(actual_n % i)
i++;
else
{
// Da decommentare se vuoi far vedere la scomposizione in fattori primi...
//printf("%d e' divisibile per %d\n",actual_n, i);
actual_n /= i;
tot += i;
}
}
if(tot + 1==n)
return 1;
else
return 0;
}
A parte che secondo i suoi calcoli 6 è l'unico numero perfetto