刚做了一篇站外题 题目是这样的:
说明
给出区间 (p,q) ,q≥p ,求 p ^ (p+1) ^ (p+2)......^ q 。
输入格式
输入 2 个数 p,q ,中间用空格分隔 (1≤p≤q≤1018)
输出格式
输出一个答案
输入数据1
3 8
输出数据1
11
这题看数据范围就知道不能暴力算 我也研究出来题解了 如下:
#include <stdio.h>
long long Xor(long long n) {
switch (n & 3) {
case 0: return n;
case 1: return 1;
case 2: return n + 1;
case 3: return 0;
}
}
int main() {
long long n,m;
scanf("%lld%lld",&n,&m);
printf("%lld",Xor(n - 1) ^ Xor(m));
return 0;
}
虽然是做出来了 但是有点瞎猫碰上死耗子的感觉 就是我的证明过程不是很完善 写完代码了也不理解 求大犇帮忙正式证明一下