# arquivo: perfeito1.py
# -------------------
# Dado um inteiro n > 0, este programa verifica se 
# n e' perfeito. Dizemos que n e' perfeito se n  e'
# igual `a soma de seus divisores estritamente menores que n. 
# Ex: n = 6 e' perfeito pois n = 6 = 1 + 2 + 3. 
# 

def main():
    #     n:    inteiro a ser testado se e' perfeito 
    #     d:	   candidato a divisor de n
    #   soma:   soma dos divisores (menores que n)

    n = int(input("Digite o valor de n: ")) 
    soma = 0
    d = 1
    while d < n:
        if (n % d == 0):
            soma = soma + d
            print ("divisor = ", d , "  soma atual = ", soma)
        d = d + 1 
    if soma == n:
        print(n, "e' perfeito.") 
    else:
        print(n, "nao e' perfeito.")
# ---------------------------------------
main()

#  ----------------------------------
#  Operador % (mod)
#    O resultado de n % d e' o resto da divisao inteira de n por d.
#    Ex:  7 % 3 = 1       9 % 3 = 0       0 % 7 = 0     1 % 7 = 1
#    Se o resto da divisao de n por d 
#    e' igual a zero entao d e' divisor de n 
# -------------------------------------

# PERGUNTA: Como melhorar o programa acima de modo a testar os candidatos
# a divisor ate' n//2 (metade de n)? Por que seria suficiente testar ate' esse valor?
