异或和——求解题

文章讨论了计算从1到N整数异或和的问题,指出常规方法在大范围内效率不高。提出当N为偶数时,根据N是否能被4整除给出不同的答案;当N为奇数时,同样根据N+1是否能被4整除给出答案。这个解法在数据范围较大时具有竞赛意义。
摘要由CSDN通过智能技术生成

题目描述

小张找到了一个整数 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值