使用因数贡献法避免枚举,来提高效率
#include <iostream>
#include<vector>
using namespace std;
using ll=long long;
int main() {
int n,a1,m;
cin>>n>>a1>>m;
vector<ll>a(n+1);
a[1]=a1;
for(int i=2;i<=n;i++){
a[i]=(a[i-1]+7LL*i)%m;
}
vector<ll>b(n+1,0);
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j+=i){
b[j]+=a[i];
}
}
ll res=0;
for(int i=1;i<=n;i++){
res^=b[i];
}
cout<<res<<endl;
return 0;
}

京公网安备 11010502036488号