Veider funktsioon | 프로그래밍의 벗 PivotOJ
PivotOJ

Veider funktsioon

시간 제한: 100ms메모리 제한: 1024MB출처: EIO 2018-19 sel1BOJ 29952

문제

On antud positiivne täisarv aa. Vaja on valida täisarv bb (1ba11 \le b \le a - 1) nii, et arvude aba \oplus b ja aba \otimes b suurim ühistegur oleks maksimaalne võimalik, ja väljastada see ühistegur. Teisisõnu on vaja leida funktsiooni f(a)=max0<b<agcd(ab,ab)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:

aa bb aba \oplus b aba \otimes b
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

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üsteemis Tehe 2-süsteemis Tulemus 2-süsteemis Tulemus 10-süsteemis
535 \oplus 3 10111101 \oplus 11 110110 66
535 \otimes 3 10111101 \otimes 11 11 11
7427 \oplus 42 111101010111 \oplus 101010 101101101101 4545
7427 \otimes 42 111101010111 \otimes 101010 1010 22

입력

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

출력

Faili väljastada NN rida. Faili reale number ii väljastada f(Ai)f(A_i) väärtus.

예제

예제 1

입력
3
2
3
5
출력
3
1
7
코드를 제출하려면 로그인하세요.