我认为这个问题可能有点令人困惑。因此,我将先解释一下。
假设给出了两个数字的XOR和SUM。(请注意,可能有多个对可以满足此要求。)
例如,如果XOR为5且SUM为,则9存在4满足SUM和XOR的对。它们是(2, 7),(3, 6),(6, 3),(7, 2)。所以2+7=9和2^7=5。
5
9
4
(2, 7)
(3, 6)
(6, 3)
(7, 2)
2+7=9
2^7=5
我只想找到满足SUM和XOR的对的 数量 。因此,在示例中,我提到的答案4就足够了。我不需要知道哪对满足他们。
有一篇社论提供了有关此问题的解决方案。可以在这里找到。(寻找627A的解决方案)
问题是我无法理解解决方案。根据我的总结,他们使用了这样的公式 (如果有两个数字a和b), a+b = (a XOR b) + (a AND b)*2
a+b = (a XOR b) + (a AND b)*2
我如何到达那?其他步骤对我来说还不清楚。
如果有人可以提供解决方案的想法或解释其解决方案,请提供帮助。
想想a+b = (a XOR b) + (a AND b)*2,当你做二进制加法如发生什么。从您的示例a = 010和b = 111:
a = 010
b = 111
010 111 --- 1001 = 101 + 100
对于每一位,你加位a和b(0+0=0,0+1=1,1+0=1,1+1=0,这正是a XOR b 加 进,从以前此外,也就是说,如果两个先前位位a和b为1,则添加它也。这正是(a AND b)*2(记住乘以2就是左移。)
a
b
0+0=0
0+1=1
1+0=1
1+1=0
a XOR b
(a AND b)*2
利用该方程式,我们可以计算出a AND b。
a AND b
现在算你想要的数字,我们看的每个位a XOR b和a AND b一个接一个和乘法所有的可能性。(让我a[i]为的i第-位写a)
a[i]
i
如果a[i] XOR b[i] = 0和a[i] AND b[i] = 0,那么a[i] = b[i] = 0。此位只有一种可能性。
a[i] XOR b[i] = 0
a[i] AND b[i] = 0
a[i] = b[i] = 0
如果a[i] XOR b[i] = 0和a[i] AND b[i] = 1,那么a[i] = b[i] = 1。此位只有一种可能性。
a[i] AND b[i] = 1
a[i] = b[i] = 1
如果a[i] XOR b[i] = 1和a[i] AND b[i] = 0,则a[i] = 1和b[i] = 0,反之亦然。两种可能性。
a[i] XOR b[i] = 1
a[i] = 1
b[i] = 0
这是不可能有a[i] XOR b[i] = 1和a[i] AND b[i] = 1。
从您的示例中,a XOR b = 101和a AND b = 010。我们有答案2*1*2 = 4。
a XOR b = 101
a AND b = 010
2*1*2 = 4