题目描述
给定一个正整数n,找到满足以下条件的最大整数k的值:
n&(n−1)&(n−2)&(n−3)&...(k)=0
其中&表示按位与AND操作。其功能是参与运算的两数各对应的二进制相与。只有对应的两个二进制都为1时,结果位才为1。
规则:
1&1=1
1&0=0
0&1=0
0&0=0
输入格式
第一行包含一个正整数t。表示接下来有t个测试用例。
每个测试用例的第一行包含一个正整数n。
输出格式
对于每个测试用例,输出一个整数,即所求的整数k。
3
2
5
17
1
3
15
提示
【样例解释】
在第一个测试用例中,连续进行按位与操作得到0值的最大值是1。
在第二个测试用例中,连续进行位与操作得到0值的最大值是3。没有比3更大的值。
- 5&4=0
- 5&4&3=0
因此,答案是3。
【数据范围】
对于20%的数据,保证t=10,n≤103。
对于40%的数据,保证t≤102,n≤105。
对于60%的数据,保证t≤104,n≤107。
对于100%的数据,保证t≤3⋅104,n≤109。