Números perfeitos. Um número inteiro é considerado um número perfeito se a soma de seus fatores, incluindo 1 (mas não o próprio número) for igual ao próprio número. Por exemplo, 6 é um número perfeito porque 6 = 1 + 2 + 3. Escreva uma função perfect que determine se o parâmetro number é um número perfeito. Use essa função em um programa que determine e imprima todos os números perfeitos entre 1 e 1000. Imprima os fatores de cada número perfeito para confirmar se o número é realmente perfeito. Desafie o poder de seu computador testando números muito maiores que 1000.

Passo 1

Fala Galera!!! Tudo certo? Espero que sim!!! Bora para mais um exercício.

Vamos criar um programa que seja capaz de retornar os números perfeitos dentro do intervalo de 1 até 1000. Antes de tudo precisar saber que um número é considerado perfeito se a soma de seus fatores, incluindo 1 (mas não o próprio número) for igual ao próprio número. Por exemplo, 6 é um número perfeito porque 6 = 1 + 2 + 3. Para isso vamos definir a função que verifica se um número é perfeito:

/* perfect retorna true se o valor for um inteiro perfeito,

ou seja, se valor for igual à soma de seus fatores */

int perfect( int value )

{

int factorSum = 1;

/* soma atual dos fatores */

int i; /* loop counter */

/* percorre os possíveis valores dos fatores */

for ( i = 2; i

/* se i é fator */

if ( value % i == 0 ) {

factorSum += i;

/* soma à soma */

} /* end if */

} /* end for */

/* retorna true se o valor for igual a soma dos fatores */

if ( factorSum == value ) {

return 1;

} /* end if */

else {

return 0;

} /* end else */

} /* end function perfect */

Passo 2

Em seguida vamos inicializar a função main() e utilizar um foor para verificar quais o possíveis números perfeito no intervalo de 1 até 1000.

#include

int perfect( int value );

/* protótipo de função */

int main()

{

int j; /* loop counter */

printf("Para os inteiros de 1 a 1000:\n");

/* loop de 2 a 1000 */

for ( j = 2; j

/* se o inteiro atual for perfeito */

if ( perfect( j ) ) {

printf( "%d é perfeito\n", j );

} /* end if */

} /* end for */

return 0;

} /* end main */

Passo 3

A saída será:

E assim finalizamos mais um exercício. Até o próximo galera!!!!

Resposta

#include

int perfect( int value );

/* protótipo de função */

int main()

{

int j; /* loop counter */

printf("Para os inteiros de 1 a 1000:\n");

/* loop de 2 a 1000 */

for ( j = 2; j

/* se o inteiro atual for perfeito */

if ( perfect( j ) ) {

printf( "%d é perfeito\n", j );

} /* end if */

} /* end for */

return 0;

} /* end main */

/* perfect retorna true se o valor for um inteiro perfeito,

ou seja, se valor for igual à soma de seus fatores */

int perfect( int value )

{

int factorSum = 1;

/* soma atual dos fatores */

int i; /* loop counter */

/* percorre os possíveis valores dos fatores */

for ( i = 2; i

/* se i é fator */

if ( value % i == 0 ) {

factorSum += i;

/* soma à soma */

} /* end if */

} /* end for */

/* retorna true se o valor for igual a soma dos fatores */

if ( factorSum == value ) {

return 1;

} /* end if */

else {

return 0;

} /* end else */

} /* end function perfect */