问题2的解法2中说到(如果不清楚题目的,可以网上搜一下 编程之美,不要被阶乘吓到)
N!中含有质因子2个个数等于N减去N的二进制表示中1的数目,
我真是百思不得其解,网上查了一些资料,好像也没有给出证明,有个哥们有证明,不过写的不够清楚,居然还是写在一张纸上的,然后拍完了传上去的,看得我真是
纠结啊,所以我决定自己来证明这题
N!中含有质因子2的个数 = N/2+N/4+N/8+......
这个我就不解释了,不明白的可以参考编程之美上的解法
N如果表示成二进制的话 = a0*2^0+a1*2^1+......an*2^n (假设有n+1位)
=an*2^n+a(n-1)*2^(n-1)+...... a1*2^1+a0*2^0
N/2=an*2^(n-1)+a(n-1)*2^(n-2)+......a1*2^0
N/4=an*2^(n-2)+a(n-1)*2^(n-2)+.....a2*2^0
.
'
N/2^n=an*2^0
则(N/2+N/4+N/8+....N/2^n)=an(2^0+...2^(n-1)+a(n-1)*(2^0+....2^(n-2))+......a1*2^0=an(2^n-1)+a(n-1)(2^(n-1)-1)+.....a1(2^1-1)+a0(2^0-1)(注意这项为0)=
an*2^n+a(n-1)*2^(n-1)+...... a1*2^1+a0*2^0-[an+a(n-1)+a(n-2)+....a0]=N-N二进制表示中1的个数