기댓값

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

요약
0부터 n-1까지 균등분포인 독립 난수 두 개를 XOR한 값의 기댓값을 최대 1000개의 n(최대 1e9)에 대해 기약분수로 정확히 계산합니다.
난이도

보통10점 중 6점

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

문제

Eric은 임의의 정수를 만들어 내는 간단한 방식을 고안했다. 정수 nn이 주어지면, 이 방식은 00부터 n−1n-1까지의 정수 중 하나를 균등한 확률로 출력한다. 예를 들어 n=3n = 3이면 00, 11, 22를 각각 1/31/3의 확률로 출력한다.

이제 Eric은 조금 더 복잡한 방식을 만들려고 한다. 서로 독립인 두 개의 생성기를 준비하고, 두 출력을 비트 단위 XOR 게이트에 넣는다. 이 게이트는 두 입력의 비트 단위 배타적 논리합(exclusive or)을 돌려준다. 친구 Nick은 그 결과의 기댓값이 궁금하다. 이 기댓값을 구하여라.

확률변수의 기댓값은 그 평균값이다. 음이 아닌 정수 값을 갖는 확률변수 ξ\xi에 대해 기댓값은

E[ξ]=∑i=0∞i⋅pi\mathbf{E}[\xi] = \sum_{i=0}^{\infty} i \cdot p_i

로 계산할 수 있으며, 여기서 pip_i는 ξ\xi가 ii와 같을 확률이다.

정확한 기댓값은 항상 유리수이므로, 반올림한 소수가 아니라 정확한 값으로 답해야 한다.

입력

첫째 줄에 테스트 케이스의 수 kk (1≤k≤10001 \le k \le 1000)가 주어진다. 이어지는 kk개의 줄에는 각각 하나의 정수 nn (1≤n≤1091 \le n \le 10^9)이 주어진다.

출력

각 테스트 케이스마다, 두 생성기 출력의 XOR에 대한 정확한 기댓값을 기약분수 p/qp/q 형태로 출력한다. 여기서 q≥1q \ge 1이고 gcd⁡(p,q)=1\gcd(p, q) = 1이다. 값이 정수인 경우에도 분모 11을 붙여서 (예: 0/10/1) 출력한다. 각 테스트 케이스의 답을 한 줄에 하나씩 출력한다.

예제4

  1. 예제 1

    입력
    2
    3
    4
    
    예상 출력
    4/3
    3/2
    
  2. 예제 2

    입력
    1
    1
    
    예상 출력
    0/1
    
  3. 예제 3

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

    입력
    3
    5
    6
    8
    
    예상 출력
    68/25
    19/6
    7/2