https://www.acmicpc.net/problem/9506
import sys
from math import sqrt
while(True):
num = int(sys.stdin.readline())
if num == -1:
break
dirtn = []
for i in range(1,int(sqrt(num))+1):
if i == 1:
dirtn.append(i)
elif num % i == 0:
dirtn.append(i)
if (i**2) == num:
continue
else:
dirtn.append(int(num//i))
dirtn.sort()
if sum(dirtn) == num:
print(num , '= ', end = '')
for i in dirtn:
if i != dirtn[-1]:
print(i, '+ ', end = '')
else:
print(i)
else:
print("%d is NOT perfect."%num)
-1 입력을 받으면 루프문 종료.
공식에 의해 몫 * 나눈 수 = 원래 수 가 되므로 몫과 나눈 수 모두 원래 수의 약수가 됩니다. 이를 이용하여 약수를 구합니다. 몫과 나눈 수가 같은 경우엔 하나만 추가해야하므로 이를 if문으로 구현합니다.