만드는 중입니다

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

1이 될 때까지

시간 제한1초메모리 제한128 MB

요약
구간 [LO, HI]에 속한 정수 중 이진 표현의 1 개수를 반복해서 세어 1에 도달하는 횟수가 정확히 X인 수의 개수를 구한다. LO는 최대 10^18이고 X는 최대 10이다.
난이도

보통10점 중 6점

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

문제

N0>0N_0 > 0인 정수에서 시작합니다. N1N_1을 N0N_0의 이진 표현에 들어 있는 1의 개수로 정의합니다. 예를 들어 N0=27N_0 = 27이면 N1=4N_1 = 4입니다.

일반적으로 NiN_i는 Ni−1N_{i-1}의 이진 표현에 들어 있는 1의 개수입니다. 이 수열은 항상 1로 수렴합니다.

임의의 시작 수 N0N_0에 대해, K(N0)K(N_0)을 Ni=1N_i = 1이 되는 가장 작은 첨자 ii로 정의합니다. 예를 들어 N0=31N_0 = 31이면 N1=5N_1 = 5, N2=2N_2 = 2, N3=1N_3 = 1이므로 K(31)=3K(31) = 3입니다. 특히 N0=1N_0 = 1은 이미 1이므로 K(1)=0K(1) = 0입니다.

연속한 정수 구간과 값 XX가 주어졌을 때, 구간 안에서 K(…)K(\ldots) 값이 XX와 같은 수는 몇 개일까요?

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 세 정수가 한 줄에 주어집니다.

LO HI X

여기서 LOLO와 HIHI (1≤LO≤HI≤10181 \le LO \le HI \le 10^{18})는 정수 구간의 하한과 상한이고, XX (0≤X≤100 \le X \le 10)는 K(…)K(\ldots)의 목표 값입니다.

입력의 끝은 세 개의 0으로 이루어진 줄이며, 이 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다, 구간 [LO,HI][LO, HI](양 끝 포함) 안에서 K(…)K(\ldots) 값이 XX와 같은 정수의 개수를 한 줄에 하나의 정수로 출력합니다.

예제1

  1. 예제 1

    입력
    31 31 3
    31 31 1
    27 31 1
    27 31 2
    1 4 1
    1023 1025 1
    1023 1025 2
    0 0 0
    
    예상 출력
    1
    0
    0
    3
    2
    1
    1