【发布时间】:2016-08-31 11:22:00
【问题描述】:
假设我们有一个数字 n。 我们需要找到位于 [L, R] 范围内的值 S ^ (S+n) 的数量。 (其中 S 是任何非负整数,^ 是按位异或运算符)。
如果 n 是 2 的幂,我可以轻松做到这一点(它们有一个非常有用的模式)
我不确定如何为任何一般的 n 解决这个问题。 有什么建议吗?
编辑:
n 也是一个非负整数。 n、L、R 均小于 10^18。
这是我在某个练习测试中给出的一个编程问题,我只是记得今天在 StackOverflow 上看到了一个类似的问题。
编辑 2: 举例说明, 说 n = 1。 然后我们知道 S ^ (S + 1) 将始终具有全为的二进制表示。例如:1,3,7,...
所以解决这个问题很容易,我们只需要在 [L,R] 范围内计算此类数字的数量就可以了。
对于 n = 2 的任何幂,类似的方法都有效。但是如果 n 不是 2 的幂,我不知道该怎么办。
【问题讨论】:
-
你能举个例子吗
-
n也是非负整数吗? -
关于 L、R 和 n 是否有任何额外的限制?你的问题的背景是什么?
-
我编辑了问题以解决您的所有问题