【发布时间】:2022-04-07 23:20:33
【问题描述】:
我在测试中发现了这个问题,但无法解决:给定两个任意数字,如何在不计算乘积本身的情况下计算其乘积二进制表示中的1 位的数量?解的渐近复杂度必须是O(log(A+B)),其中A 和B 是给定的因子。
例如,如果 A 和 B 是 3 和 7,则产品是 21。 21的二进制表示是10101,它有三个1位,所以答案是3。
谁能建议如何做到这一点?
【问题讨论】:
-
@JohnBollinger 绝对不是
-
@harold 怎么不行?您计算产品,并计算其中设置的位。对于给定的数据类型,可以在恒定的时间和空间内完成位计数,这甚至比所要求的复杂度界限还要好。
-
@JohnBollinger 如果这是答案,OP 早就知道了。另外数据类型不能是定长的,否则整个问题一开始就不存在。
-
@John Bollinger:请参阅编辑。