약수의 개수 알고리즘

2026. 6. 2. 11:01·Algorithm
public int countDivisor(int num) {
    double sqrt = Math.sqrt(num);
    int count = 1;

    for (int i = 2; i <= sqrt; i++) {
        if (num % i == 0) count++;
    }

    return sqrt == Math.floor(sqrt) ? count * 2 - 1 : count * 2;
}

 

1부터 n까지의 숫자를 i로 나누어 떨어지는 수를 count 에 더하면 시간 복잡도가 O(n)이 나오게 된다.

하지만, 약수의 개수를 구할 때에는 해당 숫자의 제곱근까지만을 구한 후 2배를 해주면 된다.

 

20을 예로 들자면, 20의 제곱근은 4.xxx이다.

20을 1부터 4까지 각각 나누어서 나누어 떨어지는 수는 아래와 같다.

 

20 % 1 = 0

20 % 2 = 0

20 % 3 = 2

20 % 4 = 0

 

따라서 1, 2, 4는 20의 약수가 된다.

이번엔 1, 2, 4로 20을 나누게 되면 아래와 같다.

 

20 / 1 = 20

20 / 2 = 10

20 / 4 = 5

 

따라서 5, 10, 20도 20의 약수가 된다.

 

위와 같은 방식으로 약수를 구하게 되면 시간 복잡도도 O(sqrt(n))으로 줄어들게 된다.

'Algorithm' 카테고리의 다른 글

소수 찾기 알고리즘  (0) 2026.05.29
'Algorithm' 카테고리의 다른 글
  • 소수 찾기 알고리즘
이서라다
이서라다
  • 이서라다
    개발일지
    이서라다
  • 전체
    오늘
    어제
    • 전체 보기 (79)
      • 내일배움캠프 (21)
        • TIL (21)
      • 프로그래머스 (23)
      • Algorithm (2)
      • BackEnd (0)
        • Spring (0)
      • Language (4)
        • JAVA (4)
      • Git (2)
      • 백준 - Java (25)
        • 입출력과 사칙연산 (6)
        • 반복문 (8)
        • 1차원 배열 (1)
        • 문자열 (7)
        • 2차원 배열 (1)
        • 조합론 (1)
        • 정렬 (1)
      • IDE (1)
        • IntelliJ (1)
      • 티스토리 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리스킨
    내일배움캠프
    jdk삭제
    til
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
이서라다
약수의 개수 알고리즘
상단으로

티스토리툴바