Algorithm 算法:一个范围内数字的约束异或
假设我们得到一个数字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的幂,我不知道该怎么办。让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)将始
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是否有其他限制?你的问题的背景是什么?我编辑了这个问题以解决你所有的问题尼斯!谢谢,现在我所要做的就是限制范围,不应该有那么大的问题!!