求[1,n]所有數的異或和
如果加以打表,我們會發現其異或和有一定的規律
我們設f(x,y)表示區間[x,y]的異或和
那么有
對於k>=1
\(f(2^k,2^{k + 1} - 1)\)中,最高位\(2^k\)的1出現了\(2^k\)次,異或和為0,所以最高位可以去掉
\(f(2^k,2^{k + 1} - 1) = f(2^k - 2^k,2^{k + 1} - 1 - 2^k) = f(0,2 ^ k - 1)\)
所以
\(f(0,2^{k + 1} - 1) = f(0,2^k - 1) Xor f(2^k,2^{k + 1} - 1) = 0\)
由此,對於所有\(k>=2\),有\(f(0,2^k - 1) = 0\)
所以,對於\(f(0,n)\),設其最高位為\(2^k\)
那么\(f(0,n) = f(0,2^k - 1) Xor f(2^k,n) = f(2^k,n)\)
在\([2^k,n]\)中,最高位出現的次數取決與n的奇偶
1、若n為奇數,那么最高位出現了\(n + 1\)次為偶數,可以去掉
\(f(2^k,n) = f(0,n - 2^k)\),可以發現\(n - 2^k\)與n具有相同的奇偶性,可以利用同樣的推導去掉
最后\(f(0,n)\)的就取決於<4的部分,即mod 4后的異或和
那么我們有:
如果n為奇數
若\(n \equiv 1 \pmod{4}\),\(f(0,n) = 1\)
若\(n \equiv 3 \pmod{4}\),\(f(0,n) = 0\)
2、若n為偶數,那么最高位出現了\(n + 1\)次為奇數,一定可以保留
同樣的,\(f(2^k,n) = f(0,n - 2^k)\),可以發現\(n - 2^k\)與n具有相同的奇偶性,可以利用同樣的推導去掉
最后\(f(0,n)\)的后兩位就取決於<4的部分
那么我們有:
如果n為偶數
若\(n \equiv 0 \pmod{4}\),\(f(0,n) = n\)
若\(n \equiv 2 \pmod{4}\),\(f(0,n) = n + 1\)
這樣,我們就get了一個\(O(1)\)求連續數字異或和的方法
若\(n \equiv 0 \pmod{4}\),\(f(0,n) = n\)
若\(n \equiv 1 \pmod{4}\),\(f(0,n) = 1\)
若\(n \equiv 2 \pmod{4}\),\(f(0,n) = n + 1\)
若\(n \equiv 3 \pmod{4}\),\(f(0,n) = 0\)