[TIL #18] 약수의 개수와 덧셈

2024. 7. 12. 15:32·Camp/T.I.L.

두 정수 $n$과 $m$이 주어진다.

둘 사이의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,

개수가 홀수인 수는 뺀 수를 리턴해야 한다.

 

약수문제? 반복문으로 브루트 포스 하듯이 할 수도 있지만...

이미 수의 성질을 활용해 여러 문제를 해결하지 않았는가.

여기서도 활용할 수 있다.

 

어떤 자연수 $n$의 약수의 개수가 짝수인지 여부를 확인하려면,

해당 자연수가 완전 제곱수인지 확인하면 된다.

 

자연수의 약수는 짝을 이루어 나타난다.

$n = 12$의 경우, 약수는 $1, 2, 3, 4, 6, 12$이고, 짝을 이루는 것을 확인할 수 있다.

하지만 완전 제곱수일 경우, 예를 들어 $n = 16$일 때 약수는 $1, 2, 4, 8, 16$이다.

4가 2번 등장하게 되므로 하나의 수로 취급하게 되어 약수의 개수가 홀수가 된다.

따라서 완전 제곱수를 판별하기 위해선 $\sqrt{n}$이 정수인지 확인하면 된다.

 

위 내용을 코드로 작성하면 다음과 같다.

#include <cmath>

using namespace std;

int solution(int left, int right) {
    int answer = 0;
    
    for (int num = left; num <= right; num++) {
        int sqrtN = sqrt(num);
        
        if (sqrtN * sqrtN == num)
            answer -= num;
        else
            answer += num;
    }        
    
    return answer;
}

완전 제곱수인지 확인하기 위해 구한 제곱근을 다시 제곱했다.

제곱근이 정수가 아니라면 ``int``에 저장 시 소수점은 사라지기 때문에 판별할 수 있다.

'Camp > T.I.L.' 카테고리의 다른 글

[TIL #20] 3진법 뒤집기  (0) 2024.07.22
[TIL #19] 사각형 별 찍기  (0) 2024.07.17
[TIL #17] 가운데 글자 가져오기  (0) 2024.07.11
[TIL #16] 없는 숫자 더하기  (0) 2024.07.10
[TIL #15] 콜라츠 추측  (0) 2024.07.09
'Camp/T.I.L.' 카테고리의 다른 글
  • [TIL #20] 3진법 뒤집기
  • [TIL #19] 사각형 별 찍기
  • [TIL #17] 가운데 글자 가져오기
  • [TIL #16] 없는 숫자 더하기
BVM
BVM
  • BVM
    E:\
    BVM
  • 전체
    오늘
    어제
    • 분류 전체보기 (168)
      • Thoughts (14)
      • Study (69)
        • Japanese (3)
        • C++ & C# (46)
        • Javascript (3)
        • Python (14)
        • Others (3)
      • Play (1)
        • Battlefield (1)
      • Others (11)
      • Camp (73)
        • T.I.L. (57)
        • Temp (1)
        • Standard (10)
        • Challenge (3)
        • Project (1)
  • 블로그 메뉴

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

  • 공지사항

    • 본 블로그 개설의 목적
  • 인기 글

  • 태그

    7계층
    암호화
    스타필드
    Network
    Python
    네트워크 프로그래밍
    FF14
    포인터
    네트워크
    Selenium
    c#
    Server
    discord
    boost
    로깅
    IOCP
    클라우드
    JS
    Dalamud
    C++
    서버
    cloudtype
    베데스다
    OSI
    bot
    프로그래머스
    db
    docker
    discord py
    Asio
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
BVM
[TIL #18] 약수의 개수와 덧셈
상단으로

티스토리툴바