求N!的二进制表示中最低位1的位置解答题中一个小证明

                      问题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的个数

 

 




                   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值