定义回顾:把正整数写成二进制(无前导 0)。若其中 1
的个数等于 0
的个数,则称为完美数。
设总位数为 L
,则必须有 L
为偶数,且 #1 = #0 = L/2
。同时最高位必须为 1
(无前导 0)。
L=2k
,并且最高位为 1
、总 1
的个数为 k
。2k
,最小的完美数是把除最高位外的 (k-1)
个 1
全放在最低位:
形如 1 0^k 1^(k-1)
,数值即给定一个正整数的二进制表示(不含前导 0 )中,1 的个数为 n ,0 的个数为 m 。
若满足 m=n
则称该整数为完美数。
现给定一个整数 x ,请找出大于等于 x 的最小完美数。
【名词解释】
二进制表示:二进制表示指将一个正整数按基数 2 形式书写,不含前导零。例如,5 的进制表示为 (101)2 。
完美数:完美数指其二进制表示中 1 的个数与 0 的个数相等。
每个测试文件均包含多组测试数据。第一行输入一个整数 T(1≤T≤105) 代表数据组数,每组测试数据描述如下:
每行输入一个整数 x(1≤x≤109) 。
对于每,组测试数据,新起一行,输出一个整数,表示不小于 x 的最小完美数。
输入
6
1
2
3
4
5
6
输出
2
2
9
9
9
9
说明
当 x=1 时,最小完美数为 2 (二进制 (10)2 ,中 1,0 均为 1 )。
当 x=2 时,最小完美数为 2 。
当 3≦x≦6 时,最小完美数为 9 (二进制 (1001)2,中 1,0 均为 2 )。
输入
3
8
9
10
输出
9
9
10