使用因数贡献法避免枚举,来提高效率

#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;
}