Veider funktsioon

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

요약
각 A에 대해 1 이상 A 미만인 b를 골라 gcd(A XOR b, A AND b)를 최대화하고 그 값을 출력한다.
난이도

어려움10점 중 8점

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

문제

On antud positiivne täisarv aa. Vaja on valida täisarv bb (1≤b≤a−11 \le b \le a - 1) nii, et arvude a⊕ba \oplus b ja a⊗ba \otimes b suurim ühistegur oleks maksimaalne võimalik, ja väljastada see ühistegur. Teisisõnu on vaja leida funktsiooni f(a)=max⁡_0\<b\<agcd⁡(a⊕b,a⊗b)f(a) = \max\_{0\<b\<a} \gcd(a \oplus b, a \otimes b) väärtus f(A)f(A), kus ⊕\oplus tähistab tehet "bitikaupa välistav VÕI" ja ⊗\otimes tehet "bitikaupa JA". Nende tehete väärtused ühebitistel arvudel on:

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

Pikematele arvudele rakendatakse neid tehteid nii, et vaadeldakse operandide kahendesitusi, sooritatakse tehted nende vastavate bittide vahel ja saadud tulemused moodustavad vastuse kahendesituse. Mõned näited:

Tehe 10-süsteemisTehe 2-süsteemisTulemus 2-süsteemisTulemus 10-süsteemis
5⊕35 \oplus 3101⊕11101 \oplus 1111011066
5⊗35 \otimes 3101⊗11101 \otimes 111111
7⊕427 \oplus 42111⊕101010111 \oplus 1010101011011011014545
7⊗427 \otimes 42111⊗101010111 \otimes 101010101022

입력

Faili esimesel real on päringute arv NN (1≤N≤1,0001 \le N \le 1\\,000) ja järgmisel NN real igaühel üks täisarv A_iA\_i (2≤A_i<2252 \le A\_i < 2^{25}).

출력

Faili väljastada NN rida. Faili reale number ii väljastada f(A_i)f(A\_i) väärtus.

예제1

  1. 예제 1

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