Números Perfeitos em Python

Neste tutorial de nosso Curso de Python Online, vamos aprender o que são os números perfeitos, como descobrir se um número é e vamos gerar todos os números perfeitos em uma determinada faixa de valores.

É um exercício resolvido de nossa lista de questões de funções.
Leia também:

Como Descobrir um Número Perfeito em Python


Vejamos o enunciado da questão:

Um número é dito perfeito quando ele é igual a soma de seus fatores. Por exemplo, os fatores de 6 são 1, 2 e 3 (ou seja, podemos dividir 6 por 1, por 2 e por 3) e 6=1+2+3, logo 6 é um número perfeito. Escreva uma função que recebe um inteiro e dizer se é perfeito ou não. Em outra função, peça um inteiro n e mostre todos os números perfeitos até n.

Ou seja, temos que fatorar o número para saber se ele é um número perfeito.
Para isso, vamos usar o operador % de resto da divisão.

Na função perfeito( n ), devemos pegar o argumento passado n e fazer o resto da divisão por 1, 2, 3, 4, ..., até n. Fazemos isso com a função range(1, n+1), que vai testar de 1 até n.

Se der 0 o resto da divisão, é porque esse valor é um divisor de n.
Vamos somar esse valor a uma variável chamada soma, que inicializamos com valor 0, no início da função perfeito().

No final, pegamos o valor contido em soma e comparamos com n.
Se forem iguais, retornamos True, pois é perfeito.
Se não forem iguais, não é um número perfeito e retornamos False.



Exibindo números perfeitos

Agora vamos para a função exibe(), que inicialmente pede um número inteiro ao usuário, n,

O que essa função vai fazer é jogar de 1 até n na função perfeito() e exibir os números que retornarem True, ou seja, que são perfeitos!

Fazemos isso com um simples laço for com range(1,n+1) e um IF dentro do laço, para testar o retorno da função perfeito().

Teste o código abaixo com os seguintes valores: 28, 496, e 8128. São perfeitos?



Código Python

def perfeito(n):
    soma=0
    for val in range(1,n):
        if n % val == 0:
            soma += val

    if soma==n:
        return True
    else:
        return False
        
def exibe():
    n = int(input('Exibir primos até o número: '))
    
    for val in range(1,n+1):
        if(perfeito(val)):
            print(val)
    
while True:
    exibe()

Nenhum comentário:

Postar um comentário