1、用到了数论知识和异或的性质。预处理出所有的1到i的异或值是关键!
2、注意是n一百万,刚开始数组开了十万RE了一次。。。
#include<cstdio>
using namespace std;int x[1000010];
int main(){
int n,ans=0,temp;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&temp);
ans^=temp;
}
x[1]=1;
for(int i=2;i<=n;i++)
x[i]=x[i-1]^i;
for(int i=1;i<=n;i++){
int k=n/i;
int t=n%i;
if(k&1) ans^=x[i-1];
ans^=x[t];
}
printf("%d\n",ans);
return 0;
}