关于连续异或

连续数字的异或结果
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

猜你喜欢

转载自blog.csdn.net/leoxe/article/details/105311467