原题解链接:https://ac.nowcoder.com/discuss/150263
时间复杂度
签到题:要考虑题中定义二进制整数必须是的次方 因此二进制整数不可能是奇数,所以二进制半整数也不可能是奇数,而且最小应该是。
然后二进制整数也可能是二进制半整数。
综合下来就是满足,大于等于,并且不是奇数,并且二进制位里有个或者个。
#include<bits/stdc++.h>
using namespace std;
long long bit_count(long long n)
{
int cnt;
for(cnt=0;n;n>>=1)cnt+=n&1;
return cnt;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
long long n;
scanf("%lld",&n);
if((bit_count(n)==2||bit_count(n)==1&&n>2)&&n%2==0)printf("YES\n");
else printf("NO\n");
}
return 0;
}