Algorithm 算法:一个范围内数字的约束异或

Algorithm 算法:一个范围内数字的约束异或,algorithm,xor,Algorithm,Xor,假设我们得到一个数字n。 我们需要找到位于[L,R]范围内的值S^(S+n)的数量。 (其中S是任何非负整数,^是按位异或运算符) 如果n是二的幂,我可以很容易地做到这一点(它们有一个非常有用的模式) 我不知道如何解决这个问题的任何一般n。 有什么建议吗 编辑: n也是一个非负整数。 n、 L,R都小于10^18 这是一个在一些实践测试中的编程问题,我曾经还给过,我只是记得今天在StackOverflow中看到了一个类似的问题 编辑2: 举例说明,, 假设n=1。 然后我们知道S^(S+1)将始

假设我们得到一个数字n。 我们需要找到位于[L,R]范围内的值S^(S+n)的数量。 (其中S是任何非负整数,^是按位异或运算符)

如果n是二的幂,我可以很容易地做到这一点(它们有一个非常有用的模式)

我不知道如何解决这个问题的任何一般n。 有什么建议吗

编辑:

n也是一个非负整数。 n、 L,R都小于10^18

这是一个在一些实践测试中的编程问题,我曾经还给过,我只是记得今天在StackOverflow中看到了一个类似的问题

编辑2: 举例说明,, 假设n=1。 然后我们知道S^(S+1)将始终具有所有1的二进制表示。例:1,3,7

所以解决这个问题很容易,我们只需要计算[L,R]范围内的这些数字的数量,这很简单

对于n=两种类似方法的任意幂。但是,如果n不是2的幂,我不知道该怎么办。

C(n)
成为(无限)组数字,对于某些
S
,可以写成
S^(S+n)

我们在集合
C(n)
上有以下递归关系:

  • 如果
    n=2k
    是偶数,那么
    C(n)={2x:x在C(k)}
  • 如果
    n=2k+1
    是奇数,那么
    C(n)={2x+1:x in C(k)}联合{2x+1:x in C(k+1)}
从这些关系可以推导出一个算法。更准确地说,一对
(C(n),C(n+1))
可以从
(C(n/2),C(n/2+1))
推导出来。请注意,上面的
并集
实际上是一个不相交的并集,因为
C(n)
中的每个元素都具有与
n
相同的奇偶校验,因此
C(k)
C(k+1)
不相交


递归关系的证明:


只要看一下
n
S

的最后一个二进制数字,你能举个例子吗
n
也是一个非负整数?关于L、R和n是否有其他限制?你的问题的背景是什么?我编辑了这个问题以解决你所有的问题尼斯!谢谢,现在我所要做的就是限制范围,不应该有那么大的问题!!