判断二进制中1的个数
刷题看到的骚操作
while (n >0 ) {
count ++;
n &= (n-1);
}
例: 1010
count=1
1010&1001 = 1000
count=2
1000&0111 = 0
返回2
判断一个数是否是2的幂
一个数是2的幂,需要满足除了最高位之外,不存在其他的位是1(都是0)
根据上文所述,可得条件 n > 0 && (n&(n-1) == 0)
计算N!的质因数2的个数
N!质因数2的个数 = [N / 2] + [N / 4] + [N / 8] + …
假设N = 10101 不考虑其他位的1 只考虑最高位
则 N/2 = 01000 N/4 = 00100 N/8 = 00010 N/16 = 00001
易得 N/2 + N/4 + N/8 + N/16 = 01111 = 10000 - 1
同理得考虑第二个1 的时候 N/2 + N/4 = 100 - 1
第三个1 1-1
故总质因数2 的个数为 10000-1+00100-1+00001-1 = 10101-3
即N!的质因数2的个数为 N减去N中1的个数