Um número perfeito é um número natural para o qual a soma de todos os seus divisores naturais, exceto ele próprio é igual ao próprio número. Exemplo 6 é um número perfeito, pois 6=1+2+3. O número 28 é um número perfeito, pois 28=1+2+4+7+14. Faça um programa que automaticamente, calcule e imprima e os 4 primeiros números perfeitos a partir do número 2 .

Passo 1

O enunciado pede que façamos um programa que calcule e imprima os 4 primeiros números perfeitos a partir do número ...2....
Informações e o que é pedido:
  • Definição: um número é perfeito quando a soma de todos os seus divisores naturais, exceto ele próprio, é igual ao próprio número. Ou seja, para um número ...n... queremos que
\text{soma\_divisores\_próprios}(n)=n.ó
  • Exemplos dados no enunciado (que confirmam a definição):
6 = 1 + 2 + 3,
28 = 1 + 2 + 4 + 7 + 14.
  • Objetivo final prático: gerar automaticamente (num programa) e imprimir os quatro primeiros números perfeitos maior ou igual a ...2....

Passo 2

Ideia simples (explicação didática do processo matemático): para testar se um número ...n... é perfeito precisamos somar todos os divisores próprios de ...n... (ou seja, todos os divisores positivos menores que ...n...) e ver se essa soma dá exatamente ...n....
O método mais direto (ingênuo) é:
  • Para cada ...d... de ...1... até ...n-1..., verificar se ...d \mid n... (ou seja, se ...n \bmod d = 0...) e, se sim, somar ...d....
  • No final comparar a soma com ...n....
Isso funciona, mas é lento para números grandes porque faz muitas divisões: ...n-1... verificações para cada ...n....

Passo 3

Otimização essencial (aquela que você deve usar na prova para não perder tempo e para o programa rodar rápido):
  • Se ...d... é divisor de ...n..., então existe o divisor “par” ...n/d.... Isso significa que divisores vêm em pares ...(d, n/d)... (exceto quando ...d^2=n..., caso em que o par é o próprio ...d...).
  • Logo, basta testar ...d... até ...\lfloor\sqrt{n}\rfloor.... Para cada ...d... que divide ...n... adicionamos ...d... e ...n/d... à soma (tratando o caso em que ...d=n/d... para não somar duas vezes).
  • Observação prática: ...1... é sempre divisor próprio de ...n>\!1..., então podemos começar a soma com ...1... e testar ...d... a partir de ...2... até ...\lfloor\sqrt{n}\rfloor....
Explicando com uma fórmula/algoritmo para somar divisores próprios de ...n>\!1...:
\text{soma} \leftarrow 1
Para cada ...d = 2,3,\dots,\lfloor\sqrt{n}\rfloor...:
  • Se ...d \mid n... então:
    • Se ...d = n/d... (ou seja, ...d^2 = n...) então ...\text{soma} \leftarrow \text{soma} + d....
    • Caso contrário, ...\text{soma} \leftarrow \text{soma} + d + n/d....
No final verificamos se ...\text{soma} = n.... Se sim, ...n... é perfeito.
Complexidade aproximada: testar até ...\sqrt{n}... reduz muito o número de divisões quando ...n... cresce.

Passo 4

Pseudocódigo do programa (claro e direto, você pode implementar em qualquer linguagem):
  • Inicializar uma lista vazia de perfeitos achados.
  • Para ...n \leftarrow 2,3,4,\dots... (incrementando):
    • Calcular ...\text{soma\_divisores\_próprios}(n)...ó usando o método otimizado do Passo 3.
    • Se ...\text{soma} = n..., adicionar ...n... à lista de perfeitos.
    • Parar quando tivermos 4 números perfeitos.
Exemplo de implementação em Python (copia, cola e roda — é só um exemplo prático que mostra exatamente como fazer):
def soma_divisores_proprios(n):
    if n == 1:
        return 0
    soma = 1
    d = 2
    limite = int(n**0.5)
    while d <= limite:
        if n % d == 0:
            outro = n // d
            if d == outro:
                soma += d
            else:
                soma += d + outro
        d += 1
    return soma

perfeitos = []
n = 2
while len(perfeitos) < 4:
    if soma_divisores_proprios(n) == n:
        perfeitos.append(n)
    n += 1

print(perfeitos)  # irá imprimir: [6, 28, 496, 8128]
Comentando o código linha a linha (didático):
  • soma_divisores_proprios(n): função que implementa o algoritmo do Passo 3.
  • Começamos soma = 1 porque ...1... é divisor próprio de qualquer ...n>\!1....
  • limite = int(n**0.5) calcula ...\lfloor\sqrt{n}\rfloor....
  • Para cada divisor ...d... encontrado, somamos ...d... e ...n/d... (tratando o caso ...d = n/d... para não somar duas vezes).
  • No loop principal acumulamos números perfeitos até termos 4.

Passo 5

Verificações manuais (para você entender bem e poder justificar na prova): vamos mostrar que os quatro primeiros números perfeitos são realmente ...6, 28, 496, 8128... listando seus divisores próprios e somas.
  • Para ...6...:
    • Divisores próprios: ...1, 2, 3....
    • Soma: 1 + 2 + 3 = 6.
    Então ...6... é perfeito.
  • Para ...28...:
    • Divisores próprios: ...1, 2, 4, 7, 14....
    • Soma: 1 + 2 + 4 + 7 + 14 = 28.
    Então ...28... é perfeito.
  • Para ...496...:
    • (Você pode obter a lista executando o programa ou fatorando ...496 = 2^4 \cdot 31....)
    • Divisores próprios: ...1, 2, 4, 8, 16, 31, 62, 124, 248....
    • Soma: calcule em duas partes: 1+2+4+8+16 = 31,
    e
    31 + 62 + 124 + 248 = 465,
    então soma total 31 + 465 = 496.
    Logo ...496... é perfeito.
  • Para ...8128...:
    • (Fatorando: ...8128 = 2^6 \cdot 127....)
    • Divisores próprios: ...1,2,4,8,16,32,64,127,254,508,1016,2032,4064....
    • Soma das potências de ...2... até ...64...: 1+2+4+8+16+32+64 = 127.
    • Soma dos múltiplos por ...127...: 127 + 254 + 508 + 1016 + 2032 + 4064 = 8001.
    • Soma total dos divisores próprios: 127 + 8001 = 8128.
    Então ...8128... é perfeito.

Passo 6

Resumo prático e dica para a prova:
  • Use a otimização até ...\sqrt{n}... para somar divisores (isso reduz tempo).
  • Comece somando ...1... e trate ...d = n/d... para não duplicar.
  • Verifique cada ...n... em ordem crescente até reunir os 4 primeiros perfeitos.
  • O programa do Passo 4 faz exatamente isso e imprime a lista dos primeiros 4 perfeitos.

Resposta

...6...
...28...
...496...
...8128...

Exercícios relacionados