小编典典

给定两个数字的XOR和SUM,如何找到满足它们的对数?

algorithm

我认为这个问题可能有点令人困惑。因此,我将先解释一下。

假设给出了两个数字的XOR和SUM。(请注意,可能有多个对可以满足此要求。)

例如,如果XOR为5且SUM为,则9存在4满足SUM和XOR的对。它们是(2, 7)(3, 6)(6, 3)(7, 2)。所以2+7=92^7=5

我只想找到满足SUM和XOR的对的 数量 。因此,在示例中,我提到的答案4就足够了。我不需要知道哪对满足他们。

有一篇社论提供了有关此问题的解决方案。可以在这里找到。(寻找627A的解决方案)

问题是我无法理解解决方案。根据我的总结,他们使用了这样的公式
(如果有两个数字a和b), a+b = (a XOR b) + (a AND b)*2

我如何到达那?其他步骤对我来说还不清楚。

如果有人可以提供解决方案的想法或解释其解决方案,请提供帮助。


阅读 255

收藏
2020-07-28

共1个答案

小编典典

想想a+b = (a XOR b) + (a AND b)*2,当你做二进制加法如发生什么。从您的示例a = 010b = 111

 010
 111
 ---
1001 = 101 + 100

对于每一位,你加位ab0+0=00+1=11+0=11+1=0,这正是a XOR b
进,从以前此外,也就是说,如果两个先前位位ab为1,则添加它也。这正是(a AND b)*2(记住乘以2就是左移。)

利用该方程式,我们可以计算出a AND b

现在算你想要的数字,我们看的每个位a XOR ba AND b一个接一个和乘法所有的可能性。(让我a[i]为的i第-位写a

  • 如果a[i] XOR b[i] = 0a[i] AND b[i] = 0,那么a[i] = b[i] = 0。此位只有一种可能性。

  • 如果a[i] XOR b[i] = 0a[i] AND b[i] = 1,那么a[i] = b[i] = 1。此位只有一种可能性。

  • 如果a[i] XOR b[i] = 1a[i] AND b[i] = 0,则a[i] = 1b[i] = 0,反之亦然。两种可能性。

  • 这是不可能有a[i] XOR b[i] = 1a[i] AND b[i] = 1

从您的示例中,a XOR b = 101a AND b = 010。我们有答案2*1*2 = 4

2020-07-28