아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

분류 모자

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

요약
학생 n이 배정받는 기숙사를 n-1의 이진수에서 1의 개수를 세어 p로 나눈 나머지로 구합니다.
난이도

보통10점 중 5점

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

문제

마법 학교는 오래전부터 마법 모자로 학생을 각 학부에 배정한다. 예전에는 학부가 4개였지만, 학교를 개편한 뒤 학부 수가 pp개로 바뀌었다. 모자는 지금도 학생 배정에 쓰인다.

배정 계획은 수열 a[1],a[2],…,a[k]a[1], a[2], \dots, a[k]로 나타낸다. a[i]a[i]는 ii번 학생이 들어갈 학부다.

모자가 계획을 만드는 방법은 다음과 같다. 학부에는 00부터 p−1p-1까지 번호가 붙어 있다. xx 다음 학부를 next(x)\text{next}(x)라 하면, x<p−1x < p-1일 때 next(x)=x+1\text{next}(x) = x+1이고 next(p−1)=0\text{next}(p-1) = 0이다. 계획은 원소가 00 하나뿐인 수열에서 시작한다. 한 단계를 거칠 때마다 원소가 kk개인 수열 aa는 원소가 2k2k개인 새 수열 a[1],a[2],…,a[k],next(a[1]),next(a[2]),…,next(a[k])a[1], a[2], \dots, a[k], \text{next}(a[1]), \text{next}(a[2]), \dots, \text{next}(a[k])가 된다.

학부가 4개일 때 학생 9명을 배정하는 과정을 보자. 모자는 다음 순서로 계획을 늘린다.

(0)→(0,1)→(0,1,1,2)→(0,1,1,2,1,2,2,3)→(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,0)(0) \to (0, 1) \to (0, 1, 1, 2) \to (0, 1, 1, 2, 1, 2, 2, 3) \to (0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 0)

마지막 수열의 길이는 학생 9명을 배정하기에 충분하다. 단계를 계속 반복하면 수열은 얼마든지 길어지므로, 어떤 학생 번호든 배정 학부가 정해진다.

nn과 pp가 여러 쌍 주어진다. 학부가 pp개일 때 nn번 학생이 어느 학부에 들어가는지 구하여라. 학생 번호는 1번부터 시작한다.

입력

첫째 줄에 질의의 개수 QQ가 주어진다 (1≤Q≤310 0001 \le Q \le 310\,000).

다음 QQ개의 줄에 각각 두 정수 nn과 pp가 이 순서대로 공백으로 구분되어 주어진다 (1≤n≤10181 \le n \le 10^{18}, 2≤p≤10182 \le p \le 10^{18}).

출력

QQ개의 줄에 각 질의의 답을 입력 순서대로 출력한다. 각 줄에는 nn번 학생이 들어갈 학부의 번호를 출력한다.

예제2

  1. 예제 1

    입력
    10
    1 4
    2 4
    3 4
    4 4
    5 4
    6 4
    7 4
    8 4
    9 4
    10 4
    
    예상 출력
    0
    1
    1
    2
    1
    2
    2
    3
    1
    2
    
  2. 예제 2

    입력
    16
    1 2
    2 2
    3 2
    4 2
    5 2
    6 2
    7 2
    8 2
    9 2
    10 2
    11 2
    12 2
    13 2
    14 2
    15 2
    16 2
    
    예상 출력
    0
    1
    1
    0
    1
    0
    0
    1
    1
    0
    0
    1
    0
    1
    1
    0