약수를 구하는 알고리즘에서

조회수 512회
def count_factors(num):
    loop=num**0.5
    # for square number
    if loop==int(loop):
        count=1
    else:
        count=0
    i=1
    while i<loop:
        if num%i==0:
            count+=2
        i+=1
    return count

약수를 구하는 함수에서 왜 count를 +2를 하나요? 루트를 씌워서 +2를 하는 거 같은데 잘 이해가 안 됩니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 약수를 하나 찾게 되면 그 수와 곱해서 num이 되는 수를 동시에 찾는 것과 마찬가지이기 때문입니다. 그래서 num보다 작은 모든 수에 대해서 약수를 찾는 대신 num의 제곱근보다 작은 수에서만 찾고 약수를 하나 찾을 때마다 2씩을 더한 것입니다. HIAOAIH 2020.8.17 14:49

1 답변

  • 주어진 수에 대해 약수의 개수를 구하는 함수입니다.

    if loop == int(loop):
        count = 1
    else:
        count = 0
    

    이 부분은 num의 제곱근이 정수인 경우 즉, num이 제곱수인 경우에는 count를 1부터 시작하고, 아닌 경우에는 count를 0부터 시작하도록 했네요. num이 제곱수일 경우 제곱근을 약수로 가지니까 그걸 세주는 부분입니다.

    i = 1
    while i < loop:
        if num % i == 0:
            count += 2
        i += 1
    

    이 부분에서는 1에서부터 주어진 수의 제곱근보다 작은 수에서 약수가 몇 개 있는지를 세서 그 수의 두 배만큼 count에 더해주는 부분입니다. 약수가 하나 있으면 짝이 되는 약수가 하나 더 있을테니 count에 2씩 더해 주는 것입니다.

    예를들면, num에 10이 들어왔을 경우 제곱근인 3.16... 보다 작은 범위에서 약수는 1과 2가 있을 것이고, 제곱근보다 큰 범위에 그 짝인 10과 5가 있을 수 있겠습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)