만드는 중입니다

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

이상한 함수

시간 제한0.1초메모리 제한1024 MB

요약
양의 정수 a가 주어졌을 때, 1 이상 a 미만의 b에 대해 a XOR b와 a AND b의 최대공약수를 가장 크게 만드는 값을 구합니다.
난이도

보통10점 중 5점

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

문제

양의 정수 aa가 주어진다. 1≤b≤a−11 \le b \le a - 1을 만족하는 정수 bb를 골라 a⊕ba \oplus b와 a⊗ba \otimes b의 최대공약수를 최대로 만들고, 그 값을 출력하라. 즉, 다음 식으로 정의된 f(A)f(A)의 값을 구하라. f(a)=max⁡0<b<agcd⁡(a⊕b,a⊗b)f(a) = \max_{0<b<a} \gcd(a \oplus b, a \otimes b) 여기서 ⊕\oplus는 비트별 XOR, ⊗\otimes는 비트별 AND를 뜻한다. 한 자리 이진수에 대한 연산은 아래 표와 같다.

aabba⊕ba \oplus ba⊗ba \otimes b
0000
0110
1010
1101

자릿수가 여러 개인 수는 두 피연산자의 이진 표현에서 같은 자리끼리 연산하고, 얻은 비트열을 이진수 답으로 삼는다. 예를 들어 101⊕11=110101 \oplus 11 = 110, 101⊗11=1101 \otimes 11 = 1이고, 111⊕101010=101101111 \oplus 101010 = 101101, 111⊗101010=10111 \otimes 101010 = 10이다.

입력

첫 줄에 질의 수 NN (1≤N≤1 0001 \le N \le 1\,000)이 주어진다. 다음 NN개의 줄에는 각각 정수 AiA_i (2≤Ai<2252 \le A_i < 2^{25})가 하나씩 주어진다.

출력

NN개의 줄을 출력한다. ii번째 줄에는 f(Ai)f(A_i)의 값을 출력한다.

예제1

  1. 예제 1

    입력
    3
    2
    3
    5
    
    예상 출력
    3
    1
    7