령과 2022. 2. 21. 17:50
def divisor(num):
    arr = []
    for i in range(1,int(num**(0.5))+1):
        if num % i == 0:
            arr.append(i)
            if i**2 != num:
                arr.append(num//i)
    return sorted(arr)

divisor(10) => 결과 [1,2,5,10]

n의 약수를 구할 때 n이하의 수를 전부 확인할 필요가 없다.

n의 제곱근 이하의 수에서 탐색을 하여 나누었을 때 나머지가 없는 값들이 약수라고 할 수 있으며 이 때 약수* x = num

이여야 하는데 x또한 약수가 될 것이기에 x도 arr에 추가한다. 단 num이 제곱으로 만들어지는 수일 경우

x가 중복해서 arr에 들어갈 수 있기 때문에 이러한 경우를 배제하고 arr를 만들어가는 식으로 구현한다.