2로 곱하기와 나누기
면접 대비시간 제한2초메모리 제한512 MB
uint32 값 x와 y가 주어질 때, 2를 곱한 뒤 2^32로 나눈 나머지를 취하는 연산과 2로 나눈 몫을 취하는 연산을 반복해 x를 y로 만들 수 있는지 판정한다.
문제
uint32 자료형에 저장된 수 를 생각하자. 이 수에 를 곱하거나 로 나누는 연산을 원하는 횟수만큼, 원하는 순서로 적용할 수 있다. 연산을 몇 번 적용한 뒤에 를 얻을 수 있는가?
uint32에 저장된 에 를 곱하면 가 된다. 예를 들어 이고, 이다.
uint32에 저장된 를 로 나누면 가 된다. 예를 들어 이고, 이다.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다 (). 다음 개 줄에 테스트 케이스가 한 줄에 하나씩 주어진다. 각 테스트 케이스는 두 정수 와 로 주어진다 ().
출력
각 테스트 케이스마다 한 줄에 단어 하나를 출력한다. 주어진 연산으로 를 로 바꿀 수 있으면 "Yes", 아니면 "No"를 출력한다.
힌트
첫 번째 테스트 케이스에서는 에 를 곱한 뒤 그 결과를 로 나누면 를 얻을 수 있다.
두 번째 테스트 케이스에서는 를 로 바꾸는 방법이 없다.