以从 a 到 b 的数字的二进制表示形式计算 "1" 位数字的算法
Algorithm to count "1" digits in binary representation of a numbers from a to b
如何在从a到b的数字的二进制表示中计数"1"位。
其中0<a<=b<10^16.
要找到任务p[a.b]的解决方案,您必须找到子问题p[0].b]和p[0].a]的解,并减去这些值
现在考虑P[0..x]任务。简单情况x=2^k(100.000bin).
0th bit is set in 2^k/2 numbers (it alternates every time)
1th bit is set in 2^k/2 numbers (it alternates after pair of numbers)
..
k-1th bit is set in 2^k/2 numbers (in 2^(k-1)..(2^k)-1))
kth bit is set in one number (in 2^k)
所以
P[0..2^k] = k * 2^(k-1) + 1
要找到任意x的解决方案,我们可以利用x的二进制表示,例如:P(1010b) = P(1000b) + P(10b)
伪码
P = 0
k = 0
while x <> 0 do
if (x and 1) then //check if kth bit is set in x
P = P + k * 2^(k-1) + 1
x = x >> 1 //shift right
k = k + 1
相关文章:
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 计算十进制 c++ 之后的数字
- 我可以通过取每个数字的模并取和来计算大数的模数吗?
- 在C++中编程,将 3 个数字发送到一个函数,然后计算这 3 个数字的平均函数
- 如何在向量中某个数字之后重新计算进程
- 如何计算整数的十进制数字?
- 如何使用count_if计算向量中的可变数字范围
- 如何计算整数链中使用了多少次数字?
- 如何计算给定数字在二叉树中出现的次数?
- C++在不使用pow或循环的情况下计算一个数字的幂
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 如何使用递归计算从 0 到给定数字的奇数?
- 在手臂氖中高效计算两个不同的数字
- 如何将此代码转换为两个以上的数字(计算HCF)
- 相同数字计算的怪异结果差异
- 用非常大的数字计算
- 猜数字:计算机要猜多少次才能得到正确的数字
- 从给定的数字计算所有可能的数字
- 根据存储在集合中的数字计算向量中的int