/*
* Ctrl+win是调试
*/
const int INF = 0x3f3f3f3f;          	// 常用的int型无穷大(避免溢出)
typedef long long ll;                   //不开longlong见祖宗
using namespace std;
#include<bits/stdc++.h>                 //头文件有问题的先找这个

void solve() {
    ll n,a,m;
    cin >> n >> a >> m;
    vector<ll>A(n+1);
    vector<ll>B(n+1);
    A[1]=a;
    for(int i=2;i<=n;i++){
        A[i]=(A[i-1]+7ll*i)%m;
    }
    for(int i=1;i<=n;i++){
        for(int j=i;j<=n;j+=i){
            B[j]+=A[i];             //题目  d/i 的意思是  所有b的序列号的约数是a序列相加
        }
    }
    ll ans=0;
    for(int i=1;i<=n;i++){
        ans^=B[i];
    }
    cout << ans;
}
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0), std::cout.tie(0);  //在打codeforce的时候最好去掉

    int _ = 1;
   // cin >> _;                           //注意这里的输入次数,注意主函数的执行次数
    while (_--) {
        solve();
    }
}

其实了解了题目的意思,可以很快地写出来,主要是理解d|i的意义。