Вам предоставляется большой диапазон [a, b], где "a" и "b" могут быть обычно от 1 до 4 000 000 000 включительно. Вы должны найти XOR всех чисел в заданном диапазоне.
Эта проблема была использована в TopCoder SRM. Я видел одно из решений, представленных в матче, и я не могу понять, как он работает.
Помог ли кто-нибудь объяснить выигрышное решение:
long long f(long long a) {
long long res[] = {a,1,a+1,0};
return res[a%4];
}
long long getXor(long long a, long long b) {
return f(b)^f(a-1);
}
Здесь getXor()
- это фактическая функция для вычисления xor всего числа в переданном диапазоне [a, b] и "f()" является вспомогательной функцией.