题目描述
小张找到了一个整数 N,他想问问你从 1 到 N 的所有不同整数的异或和是多少, 请你回答他的问题。
输入描述:
第一行包含一个整数 N (1 <= N <= 100000)。
输出描述:
第一行输出一个整数, 代表从 1 到 N 的所有不同整数的异或和。
示例1
输入5
输出1
分析
友好的数据范围使得此题成为大水题,循环 1e5 次毫无压力。于是只要循环累计 1 到 N 的异或运算即可通过此题,复杂度 。
但实际上,本题存在 的解法,如果 的范围取到 1e9,甚至更大,或许才有竞赛的意义。
当 是偶数时
如果 能被 4 整除,答案是
如果 不能被 4 整除,答案是
当 是奇数时
如果 能被 4 整除,答案是 1
如果 不能被 4 整除,答案是 0
N = int(input())
if N % 2 == 0:
if N%4 == 0:
print(N)
else:
print(N+1)
else:
if (N+1)%4 == 0:
print(0)
else:
print(1)