【发布时间】:2017-01-11 02:19:26
【问题描述】:
给定一个long int x,统计满足以下条件的a值的个数:
a XOR x > x
0 ax
其中 a 和 x 是长整数,XOR 是按位异或运算符
你将如何解决这个问题?
我还应该提到,输入 x 可以大到 10^10
我已经设法通过迭代 0 到 x 检查条件并增加计数值来获得蛮力解决方案..但这不是最佳解决方案...
这是我尝试过的蛮力。它可以工作,但对于较大的 x 值非常慢。
for(int i =0; i < x; i++)
{
if((0 < i && i < x) && (i ^ x) > x)
count++;
}
【问题讨论】:
-
如果投反对票的人可以提及他们投票的原因,那就太好了,否则我们将不得不称他们为尴尬。
-
不是downvoter,但这与编程无关。这是关于需要证明的数字的数学事实。
-
对于 x > 0,a 中为 1 且 x 中为 0 的任何位都会导致 a ^ x > x,除了 MSB 会导致它为负数。
-
好的,这里有一个提示。假设您知道某个数字
x的答案。你现在能计算出2x的答案吗?2x+1呢? -
(0 < i && i < x)中的if()完全是多余的。删除它和/或使用-O2编译,您应该会在几秒钟内得到结果。