
문제 설명
- 자신을 제외한 약수들의 합이 자신과 같은지 판별하는 문제입니다.
접근법
- 1부터 N까지 수 중 N을 나눴을 때 그 나머지가 0이면 그 수는 N의 약수입니다.
- 그 이유는 약수의 뜻이 나누어 나머지가 없이 떨어지는 수이기 때문입니다.

(a).join(list)는 list의 값 사이사이에 a를 넣어라는 뜻입니다.
정답
while True:
num = int(input())
if num == -1:
break
sum_list=[]
sum_ = 0
for i in range(1,num):
if num%i ==0:
sum_list.append(str(i))
sum_ += i
if sum_ == num:
word = " + ".join(sum_list)
print(f"{num} = {word}")
else:
print(f"{num} is NOT perfect.")
기타
- N이 매우 커질 경우 1부터 N까지 전부 확인하는 건 비효율적입니다.
- N의 제곱근까지만 가도 우리는 약수를 모두 구할 수 있습니다.
- 그 이유는 약수는 짝이 있기 때문입니다. 2가 8의 약수란걸 알았다면 자연스럽게 8/2인 4도 8의 약수라는 걸 알 수 있습니다.
- 제곱근까지 계산할 때 3^2 = 9처럼 정확히 제곱근인 약수도 포함해야 함을 신경써 줘야 합니다.