만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

비트 세기

면접 대비

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

요약
정수 k와 b가 주어질 때 0부터 2^b-1까지 k의 배수의 이진 표현에서 1의 개수를 모두 더한 값을 10^9+9로 나눈 나머지로 출력합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 수학
정답자
아직 제출이 없습니다

문제

값 kk와 비트 수 bb가 주어진다. 00 이상 2b−12^b-1 이하의 kk의 배수 각각을 이진수로 나타냈을 때, 등장하는 1 비트의 총 개수를 구하시오.

입력

각 입력은 하나의 테스트 케이스로 이루어진다. 프로그램은 서로 다른 입력에 대해 여러 번 실행될 수 있다.

각 테스트 케이스는 한 줄로 이루어지며, 공백으로 구분된 두 정수 kk (1≤k≤1,0001 \le k \le 1{,}000)와 bb (1≤b≤1281 \le b \le 128)가 주어진다. kk와 bb의 의미는 위에서 설명한 것과 같다.

출력

00 이상 2b−12^b-1 이하의 kk의 배수 각각을 이진수로 나타냈을 때 등장하는 1 비트의 총 개수를 한 정수로 출력한다. 이 값은 매우 클 수 있으므로 109+910^9+9로 나눈 나머지를 출력한다.

힌트

두 번째 예제를 보자. k=10k=10, b=5b=5이다.

25−1=312^5-1 = 31이다. 00 이상 3131 이하의 1010의 배수는 1010, 2020, 3030이다.

  • 10=01010210 = 01010_2 (1 비트 2개)
  • 20=10100220 = 10100_2 (1 비트 2개)
  • 30=11110230 = 11110_2 (1 비트 4개)

따라서 1 비트는 모두 2+2+4=82+2+4=8개이다.

예제5

  1. 예제 1

    입력
    1 4
    
    예상 출력
    32
    
  2. 예제 2

    입력
    10 5
    
    예상 출력
    8
    
  3. 예제 3

    입력
    100 7
    
    예상 출력
    3
    
  4. 예제 4

    입력
    3 28
    
    예상 출력
    252698795
    
  5. 예제 5

    입력
    11 128
    
    예상 출력
    856188165