码迷,mamicode.com
首页 > 其他好文 > 详细

求X=N/2+N/4+N/8+N/16+...

时间:2020-07-05 20:53:08      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:除了   编程   bsp   个数   表示   方法   字节   二进制   1的个数   

公式中的N是自然数,除法是整数除法(向下取整)。

这个公式是从《编程之美》阶乘一章摘来的,除了硬算之外,里面给出了另一个答案:X=N-(N的二进制表示中1的数目)。

但是书中用11011为例证明这个结论太复杂了,看不懂,我想了另外一个解读:

N

= (N的二进制最低位 + N/2) + N/2

= (N的二进制最低位 + N/2) + (N/2的二进制最低位 + N/4) + N/4

...

= (N的二进制最低位 + N/2的二进制最低位 + ...) + (N/2 + N/4 + ...)

= N的二进制中1的个数 + X

求1的个数在书上也介绍了O(1)的查表法,即使对于int32也成立(拆成4个字节查4次表)。因此这种方法比起硬算的O(log n)稍微快些。

求X=N/2+N/4+N/8+N/16+...

标签:除了   编程   bsp   个数   表示   方法   字节   二进制   1的个数   

原文地址:https://www.cnblogs.com/xrst/p/13251406.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!