Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Classifique um Número pelos Seus Divisores

Classifique um inteiro positivo como perfeito, abundante ou deficiente.

O que você vai aprender

  • Encontrar todos os divisores próprios de um número
  • Acelerar a busca de divisores com a raiz quadrada
  • Classificar resultados com condições

Problema

Ver original (inglês)

Some os divisores positivos de n que são estritamente menores que n. Se essa soma for igual a n, o número é perfeito. Se a soma for maior, ele é abundante; se for menor, é deficiente. O número 1 não possui divisores positivos próprios, então a soma dos seus divisores é 0.

Implemente perfect_number(n).

Entrada

n: O inteiro positivo a ser classificado.

Saída

Retorne perfect, abundant ou deficient como texto em letras minúsculas.

Restrições

1 ≤ n ≤ 1.000.000. Valores zero e negativos estão excluídos.

Exemplos

Exemplo 1
Entrada:
n = 18

Saída esperada:
expected = "abundant"
Entrada:
long long n = 18;

Saída esperada:
std::string expected = "abundant";
Entrada:
long n = 18;

Saída esperada:
string expected = "abundant";

Explicação

Os divisores próprios são 1, 2, 3, 6 e 9. A soma deles é 21, maior que 18.

Exemplo 2
Entrada:
n = 28

Saída esperada:
expected = "perfect"
Entrada:
long long n = 28;

Saída esperada:
std::string expected = "perfect";
Entrada:
long n = 28;

Saída esperada:
string expected = "perfect";

Explicação

A soma dos divisores próprios é 1 + 2 + 4 + 7 + 14 = 28, exatamente o próprio número.

Como abordar

Tente sozinho primeiro e depois abra uma dica de cada vez.

Dica 1

Encontre os divisores próprios de n e compare a soma deles com n para decidir a classe.

Dica 2

Você só precisa procurar divisores até a raiz quadrada, pareando cada divisor com seu companheiro.

Dica 3

Trate 1 com cuidado, pois ele não tem divisores positivos próprios e a soma de seus divisores é zero.

Complexidade esperada

tempo O(√n), espaço extra O(1)

Referências

Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.