/*
* 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的意义。

京公网安备 11010502036488号