[백준/파이썬] 9506번

민정·2023년 2월 8일
0

[백준/파이썬]

목록 보기
89/245
post-thumbnail

백준 9506번

문제

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문으로 구현합니다.

profile
パㅔバ6ㅇr 덤벼ㄹΓ :-0

0개의 댓글