中等计算

题目 中等计算

image-db84c611

思路分析

image-3db39309

对于后面部分可以使用取模性质找到答案循环 把偶数对个使用异或性质抵消掉

不过别忘了前半部分(第一列) 对于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;

}

同类题型

视频讲解


⬅️ 不用加减乘除做加法 🏠 00-刷题理模型 ➡️ 二进制中1的个数