中等计算
题目 中等计算
思路分析
对于后面部分可以使用取模性质找到答案循环 把偶数对个使用异或性质抵消掉
不过别忘了前半部分(第一列) 对于a*1……a*n得老老实实做一遍异或
代码实现
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int n;
int s[N];//预处理1^2^3^……^n的结果
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
s[i]=s[i-1]^i;
int res=0;
//a1^……^an是要算一遍的
for(int i=0;i<n;i++)
{
int a;cin>>a;
res^=a;
}
for(int i=1;i<=n;i++)
{
int k=n/i;//看有奇数对还是偶数对
if(k&1)//同真为真 如果满足就是奇数
{//如果是奇数对 就算上一遍循环的
res^=s[i-1];
}
//不管是奇数是偶数 都得把零下来的异或进去
res^=s[n%i];
}
cout<<res<<endl;
return 0;
}
💬 评论