2002 – 3

Un numero intero positivo è detto perfetto se è uguale alla somma dei suoi divisori propri (cioè, i divisori maggiori di 0 e minori del numero stesso).
Il seguente programma deve stampare i primi 5 numeri perfetti.

Aggiungete le istruzioni che mancano:

#include 

int isPerfect(int x)
{
    int y, s = ....(1)....;
    for(y = 1; y < x; y++)
        if(....(2).... == 0)
            s += y;
    return (....(3)....);
}
void main()
{
    int x=1, c=0;
    while(c < 5)
    {
        if(isPerfect(x))
        {
            printf("%d\n", x);
             ....(4)....;
        }
        x++;
    }
}

Soluzione:

  1. 0
  2. x%y
  3. s == x
  4. c++

Il codice completo è

#include 

int isPerfect(int x)
{
    int y, s=0;

    for(y=1; y < x; y++)
        if(x%y == 0)
            s += y;
            
    return (x == s);
}
int main()
{
    int x=1, c=0;
       
    while(c < 5)
    {
        if(isPerfect(x))
        {
            printf("%d\n", x);
            c++;
        }
        x++;
    }      
    return 0; 
}