Este é o meu primeiro desafio!
fundo
Número perfeito é um número inteiro positivo, que é igual à soma de todos os seus divisores, exceto ele próprio.
Então 6
é o número perfeito, desde então 1 + 2 + 3 = 6
.
Por outro lado 12
, não é, porque 1 + 2 + 3 + 4 + 6 = 16 != 12
.
Tarefa
Sua tarefa é simples, escreva um programa que, por n
certo, imprima uma dessas mensagens:
Eu sou um número perfeito, porque
d1 + d2 + ... + dm = s == n
eu não sou um número perfeito, porqued1 + d2 + ... + dm = s [<>] n
Onde
d1, ... dm
estão todos os divisores, n
exceto n
.
s
é a soma de todos os divisores d1, ..., dm
(novamente, sem n
).
[<>]
é <
(se s < n
) ou >
(se s > n
).
Exemplos
Por n
ser 6
: "Eu sou um número perfeito, porque 1 + 2 + 3 = 6 == 6"
Por n
ser 12
: "Eu não sou um número perfeito, porque 1 + 2 + 3 + 4 + 6 = 16> 12"
Por n
ser 13
: "Eu não sou um número perfeito, porque 1 = 1 <13"
Regras
n
não é maior que o padrão do seu idiomaint
.- Você pode ler
n
da entrada padrão, dos argumentos da linha de comando ou de um arquivo. - A mensagem de saída deve ser impressa na saída padrão e nenhum caractere adicional pode aparecer na saída (pode haver espaço em branco à direita ou nova linha)
- Você não pode usar nenhuma função interna ou de biblioteca que resolva a tarefa (ou sua parte principal) para você. Não
GetDivisors()
ou algo parecido. - Todas as outras brechas padrão se aplicam.
Vencedora
Este é o código-golfe, pelo que o código mais curto em bytes vence!
=
e ==
na mesma equação? Isso não faz sentido. Deve ser d1 + d2 + ... + dm = s = n
IMO.