一直找不到哪里没取模。
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef long long ll;
const int N=5e6+5;
int mod,Inv6,cnt,p[N],b[N],phi[N],S[N];
unordered_map<ll,int> mp;
int kuai(int a,int b){
int ans=1;
for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)ans=1ll*a*ans%mod;
return ans;
}
void work(int maxn){
phi[1]=1;
for(int i=2;i<=maxn;i++){
if(!b[i])p[++cnt]=i,phi[i]=i-1;
for(int j=1;j<=cnt&&p[j]*i<=maxn;j++){
b[p[j]*i]=1;
if(i%p[j]==0){
phi[i*p[j]]=phi[i]*p[j];
break;
}
phi[i*p[j]]=phi[i]*(p[j]-1);
}
}
for(int i=1;i<=maxn;i++)S[i]=(S[i-1]+1ll*phi[i]*i%mod*i%mod)%mod;
}
int F(ll n){n%=mod;return 1ll*n*(n+1)/2%mod*(1ll*n*(n+1)/2%mod)%mod;}
int F1(ll n){n%=mod;return 1ll*n*(n+1)%mod*(2*n%mod+1)%mod*Inv6%mod;}
int get_S(ll n){
if(n<=5e6)return S[n];
if(mp.count(n))return mp[n];
int ans=1ll*(n%mod)*(n%mod)%mod*(n%mod)%mod;ll r=0;
for(ll l=2;l<=n;l=r+1){
r=n/(n/l);
ans=(ans-1ll*(F1(r)-F1(l-1)+mod)*get_S(n/l)%mod+mod)%mod;
}
return mp[n]=ans;
}
int get_ans(ll n){
int ans=0;ll r=0;
for(ll l=1;l<=n;l=r+1){
r=n/(n/l);
ans=(ans+1ll*(get_S(r)-get_S(l-1)+mod)%mod*F(n/l)%mod)%mod;
}
return ans;
}
int n;
signed main(){
scanf("%lld%lld",&mod,&n);
Inv6=kuai(6,mod-2);
work(5e6);
printf("%lld",get_ans(n));
}
/*
1000000007 10000000000
*/