만드는 중입니다

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

2로 곱하기와 나누기

면접 대비

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

요약
uint32 값 x와 y가 주어질 때, 2를 곱한 뒤 2^32로 나눈 나머지를 취하는 연산과 2로 나눈 몫을 취하는 연산을 반복해 x를 y로 만들 수 있는지 판정한다.
난이도

보통10점 중 5점

유형
비트 연산, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

uint32 자료형에 저장된 수 xx를 생각하자. 이 수에 22를 곱하거나 22로 나누는 연산을 원하는 횟수만큼, 원하는 순서로 적용할 수 있다. 연산을 몇 번 적용한 뒤에 yy를 얻을 수 있는가?

uint32에 저장된 aa에 22를 곱하면 (a⋅2) mod 232(a \cdot 2) \bmod 2^{32}가 된다. 예를 들어 (3⋅2) mod 232=6(3 \cdot 2) \bmod 2^{32} = 6이고, (2 147 483 649⋅2) mod 232=2(2\,147\,483\,649 \cdot 2) \bmod 2^{32} = 2이다.

uint32에 저장된 aa를 22로 나누면 ⌊a2⌋\left\lfloor\frac{a}{2}\right\rfloor가 된다. 예를 들어 ⌊62⌋=3\left\lfloor\frac{6}{2}\right\rfloor = 3이고, ⌊32⌋=1\left\lfloor\frac{3}{2}\right\rfloor = 1이다.

입력

첫째 줄에 테스트 케이스의 수 tt가 주어진다 (1≤t≤10001 \le t \le 1000). 다음 tt개 줄에 테스트 케이스가 한 줄에 하나씩 주어진다. 각 테스트 케이스는 두 정수 xx와 yy로 주어진다 (0≤x,y<2320 \le x, y < 2^{32}).

출력

각 테스트 케이스마다 한 줄에 단어 하나를 출력한다. 주어진 연산으로 xx를 yy로 바꿀 수 있으면 "Yes", 아니면 "No"를 출력한다.

힌트

첫 번째 테스트 케이스에서는 xx에 22를 곱한 뒤 그 결과를 22로 나누면 yy를 얻을 수 있다.

두 번째 테스트 케이스에서는 xx를 yy로 바꾸는 방법이 없다.

예제1

  1. 예제 1

    입력
    2
    2147483649 1
    9 13
    
    예상 출력
    Yes
    No