Página 1 de 1

Duvida na lógica desse exercicio

Enviado: 03 Nov 2010, 10:43
por mazoni
Bom dia pessoal. Estou na dúvida desse exercicio

Atividade: Crie um programa que determine os 3 primeiros números perfeitos,
armazenando-os em um array. Mostre o conteúdo do array. Um número n > 0 é perfeito
quando a soma dos seus divisores (exceto ele mesmo) é exatamente igual a n.
Exemplo: 6 -> 1+2+3 = 6

Alguem poderia me explicar a lógica desse exercicio?

Re: Duvida na lógica desse exercicio

Enviado: 08 Dez 2010, 18:04
por rafaelplaurindo
Amigão, é o seguinte, diz-se que um valor é múltiplo de outrem quando o resto da divisão do maior pelo menor é igual a 0, correto?


Eu programo em PHP, portanto, tente entender o algoritmo sem questionar a "linguagem", sendo a mesma pseudônima. Ok?

Código: Selecionar todos

n = 1
m = n-1 //valor que será testado se é múltiplo de n. O n-1, é porque na restrição do problema, consta que ele mesmo não pode entrar.
sum = 0 //guarda o somatório para testar se igual a n, como no exemplo que citou.
p = 0 //guarda quantos valores perfeitos forem achados, isto é, a quantidade
vet[2] = nulo //cria um array nulo, isto é, sem valor algum armazenado

enquanto (p < 4)
{
      enquanto (m > 0) {
            if (n % m == 0)
                  sum += m
            m -= 1
      }

      //verifica se o somatório de seus múltiplos é igual a ele mesmo. Caso sim, armazena-o no vetor
      if (n == sum) {
            p += 1
            vet[pos] = n;
            n += 1
      }
}

//mostra os valores encontrados
para (i=0 ate 2)
      imprimir (vet[i])