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 */