以二进制数过滤位

时间:2015-11-04 05:36:29

标签: bit-manipulation bitwise-operators

任何人都可以为以下问题提供明确的逻辑。我很困惑。

给出n位数作为输入,并且一个接一个地施加OP(j)和OP(k)。目标是指定应用这两个操作后保持相同的位数。

OP(i)意味着翻转每个位。我> 0

2 个答案:

答案 0 :(得分:1)

根据您的描述,操作OP(i)将改变每个'i'位,因此它改变了总共(n / i)位。链接操作会让事情变得棘手。如果两次传递相同的参数,那么相同的值将被翻转,翻转的位的总数为0,因为我们恢复到原始值。

如果第二个操作使用不同的值(j),则需要添加floor(n / j)然后减去2 * M,其中M是n范围内i和j的公倍数。这是因为你将翻转任何常见的倍数并将它们恢复到原始值,但是已经累积了两次(一次在OP(i)中,一次在OP(j)中),你需要从总数中减去2解释它。

答案 1 :(得分:0)

对于k!= j,n-2位保持不变。 当k == j时,n-1位保持不变。