连续数字的异或结果
n<=m
首先我们知道从n异或到m的结果假定为函数fun(n,m)
我们很容易发现fun(n,m)=fun(1,m) xor fun(1,n-1)
所以我们只需要找到从1异或到任意位置的答案,我们就可以求出任意区间的异或结果了
摆上结论
int get_xor(int n)
{
求出从1连续异或到n的结果
int ans;
int res=n%4;
switch(res)
{
case 1: ans=1; break;
case 2: ans=n+1; break;
case 3: ans=0; break;
case 0: ans=n; break;
}
return ans;
}
每四个数一次循环1,n+1,0,n