Código-fonte:
def obter_divisores(n):
lista_divisores = list()
for i in range(1, n+1):
if (n % i == 0):
lista_divisores.append(i)
return lista_divisores
def eh_numero_perfeito(n):
divisores = obter_divisores(n)
soma_divisor = 0
for divisor in divisores:
if (divisor < n):
soma_divisor += divisor
return (soma_divisor == n)
def obter_numeros_perfeitos(N):
lista_numeros_perfeitos = list()
for k in range(1, N+1):
if (eh_numero_perfeito(k)):
lista_numeros_perfeitos.append(k)
return lista_numeros_perfeitos
if __name__ == '__main__':
N = 30
print obter_numeros_perfeitos(N)
Complexidade:
\( \sum_{i=1}^{N}{ \sum_{j=1}^{i}{c} } = c\sum_{i=1}^{N}{ i } = c(N+1)N/2 \in O(N^2) \)
Algum erro? Favor me avisar. Dúvidas e sugestões são sempre bem-vindos!