给定两个数字的XOR和SUM,如何找到满足它们的对数?
问题内容:
我认为这个问题可能有点令人困惑。因此,我将先解释一下。
假设给出了两个数字的XOR和SUM。(请注意,可能有多个对可以满足此要求。)
例如,如果XOR为5
且SUM为,则9
存在4
满足SUM和XOR的对。它们是(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 = 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 AND b
。
现在算你想要的数字,我们看的每个位a XOR b
和a AND b
一个接一个和乘法所有的可能性。(让我a[i]
为的i
第-位写a
)
-
如果
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] XOR b[i] = 1
和a[i] AND b[i] = 0
,则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
。