Percursos
/
Python
Python
/
Exercícios
/
Números perfeitos
Números perfeitos

Números perfeitos

Fácil

Instruções

Determina se um número é perfeito, abundante ou deficiente, com base no esquema de classificação de Nicómaco (60 - 120 d.C.) para números inteiros positivos.

O matemático grego Nicómaco concebeu um esquema de classificação para os números inteiros positivos, identificando cada um como pertencendo de forma única às categorias de perfeito, abundante ou deficiente, com base na sua soma dos divisores próprios. A soma dos divisores próprios é definida como a soma dos fatores de um número, sem incluir o próprio número. Por exemplo, a soma dos divisores próprios de 15 é 1 + 3 + 5 = 9.

Perfeito

Um número é perfeito quando é igual à sua soma dos divisores próprios. Por exemplo:

  • 6 é um número perfeito porque 1 + 2 + 3 = 6
  • 28 é um número perfeito porque 1 + 2 + 4 + 7 + 14 = 28

Abundante

Um número é abundante quando é menor do que a sua soma dos divisores próprios. Por exemplo:

  • 12 é um número abundante porque 1 + 2 + 3 + 4 + 6 = 16
  • 24 é um número abundante porque 1 + 2 + 3 + 4 + 6 + 8 + 12 = 36

Deficiente

Um número é deficiente quando é maior do que a sua soma dos divisores próprios. Por exemplo:

  • 8 é um número deficiente porque 1 + 2 + 4 = 7
  • Os números primos são deficientes

Tarefa

Implementa uma forma de determinar se um determinado número é perfeito. Dependendo da linguagem que estás a aprender, podes também ter de implementar uma forma de determinar se um determinado número é abundante ou deficiente.

Mensagens de exceção

Por vezes, é necessário lançar uma exceção. Quando o fazes, deves incluir sempre uma mensagem de erro esclarecedora para indicar qual é a origem do erro. Isto torna o teu código mais legível e ajuda bastante na depuração. Em situações em que sabes que a origem do erro será de um determinado tipo, podes optar por lançar um dos tipos de erro incorporados, mas deves continuar a incluir uma mensagem esclarecedora.

Este exercício em particular exige que uses a instrução raise para "lançar" um ValueError se à função classify() for passado um número que não seja um inteiro positivo. Os testes só passam se fizeres raise da exception e incluíres uma mensagem com ela.

Para lançar um ValueError com uma mensagem, escreve a mensagem como argumento do tipo de exception:

# if a number to be classified is less than 1.
raise ValueError("Classification is only possible for positive integers.")
Editar via GitHub A ligação abre numa nova janela ou separador
Python Exercism

Estás pronto para começar Números perfeitos?

Inscreve-te no Exercism para aprenderes e dominares Python com 17 conceitos146 exercícios, e mentoria humana real, tudo grátis.