약수들의 합

import sys


def main():
    input = sys.stdin.readline

    while True:
        n = int(input())
        if n == -1:
            break

        divisors = []
        for i in range(1, n):
            if n % i == 0:
                divisors.append(i)

        if sum(divisors) == n:
            print(f"{n} = {' + '.join(map(str, divisors))}")
        else:
            print(f"{n} is NOT perfect.")


main()

어떤 수가 자기 자신을 제외한 모든 약수들의 합과 같으면 그 수를 완전수라고 합니다. 따라서 $1$부터 $n-1$까지의 수 중에서 $n$의 약수들을 리스트에 담고, 그 합이 $n$과 같은지 확인하면 됩니다. $n$을 제외해야 한다는 점과 출력 형식에 유의하며 구현하면 해결할 수 있습니다.

댓글