비트 개수 (Large)

시간 제한5초메모리 제한512 MB

요약
N을 음이 아닌 두 수 a와 b의 합으로 나누어 a와 b의 이진수에 들어 있는 1의 개수 합이 최대가 되도록 합니다.
난이도

보통10점 중 5점

유형
비트 연산, 그리디
정답자
아직 제출이 없습니다

문제

f(x)f(x)를 xx를 2진법으로 나타냈을 때 등장하는 1의 개수로 정의한다. 예를 들어 5는 2진법으로 1012101_2이므로 f(5)=2f(5) = 2다.

양의 정수 NN이 주어진다. a+b=Na + b = N을 만족하는 0 이상의 정수 쌍 (a,b)(a, b) 가운데 f(a)+f(b)f(a) + f(b)가 최대가 되는 쌍을 찾고, 그때의 f(a)+f(b)f(a) + f(b) 값을 출력한다.

입력

첫째 줄에 테스트 케이스의 개수를 나타내는 양의 정수 TT가 주어진다. 이어지는 TT개의 줄에는 각 테스트 케이스의 NN이 한 줄에 하나씩 주어진다.

제한

  • 1≤T≤10001 \le T \le 1000
  • 1≤N≤10181 \le N \le 10^{18} (NN은 32비트 정수형에 들어가지 않는다)

출력

각 테스트 케이스마다 다음 형식으로 한 줄씩 출력한다.

Case #X: P

XX는 1부터 시작하는 테스트 케이스 번호이고, PP는 f(a)+f(b)f(a) + f(b)의 최댓값이다.

예제2

  1. 예제 1

    입력
    4
    1
    4
    31
    1125899906842624
    
    예상 출력
    Case #1: 1
    Case #2: 3
    Case #3: 5
    Case #4: 51
    
  2. 예제 2

    입력
    10
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    예상 출력
    Case #1: 1
    Case #2: 2
    Case #3: 2
    Case #4: 3
    Case #5: 3
    Case #6: 4
    Case #7: 3
    Case #8: 4
    Case #9: 4
    Case #10: 5