传送门
先常规反演得到
a
n
s
=
∑
i
=
1
n
1
4
[
⌊
n
i
⌋
(
⌊
n
i
⌋
+
1
)
]
2
f
(
i
)
ans=\sum_{i=1}^n\frac 14[\lfloor \frac ni\rfloor(\lfloor \frac ni\rfloor+1)]^2f(i)
ans=∑i=1n41[⌊in⌋(⌊in⌋+1)]2f(i),其中
f
(
n
)
=
n
∑
d
∣
n
d
μ
(
d
)
f(n)=n\sum_{d\mid n}d\mu(d)
f(n)=n∑d∣ndμ(d)。
考虑如何计算
f
f
f的前缀和,由于
f
(
n
)
=
n
∑
d
∣
n
d
μ
(
d
)
=
∑
d
∣
n
μ
(
d
)
d
2
n
d
=
(
(
μ
⋅
i
d
2
)
∗
i
d
)
(
n
)
f(n)=n\sum_{d\mid n}d\mu(d)=\sum_{d\mid n}\mu(d)d^2\frac nd=((\mu\cdot id_2)*id)(n)
f(n)=n∑d∣ndμ(d)=∑d∣nμ(d)d2dn=((μ⋅id2)∗id)(n),故我们可以设
g
=
f
∗
i
d
2
=
(
μ
⋅
i
d
2
)
∗
i
d
∗
i
d
2
=
(
(
μ
⋅
i
d
2
)
∗
i
d
2
)
∗
i
d
=
ϵ
∗
i
d
=
i
d
g=f*id_2=(\mu\cdot id_2)*id*id_2=((\mu\cdot id_2)*id_2)*id=\epsilon*id=id
g=f∗id2=(μ⋅id2)∗id∗id2=((μ⋅id2)∗id2)∗id=ϵ∗id=id,然后就是杜教筛的套路式了,设
S
(
n
)
=
∑
i
=
1
n
f
(
i
)
S(n)=\sum_{i=1}^nf(i)
S(n)=∑i=1nf(i),于是有
S
(
n
)
=
∑
i
=
1
n
i
d
(
i
)
−
∑
i
=
2
n
i
d
2
(
i
)
S
(
⌊
n
i
⌋
)
S(n)=\sum_{i=1}^nid(i)-\sum_{i=2}^nid_2(i)S(\lfloor \frac ni\rfloor)
S(n)=∑i=1nid(i)−∑i=2nid2(i)S(⌊in⌋)。
由于杜教筛外面套分块不会影响杜教筛复杂度(我也不知道为什么),因此总复杂度仍然为 O ( n 2 3 ) O(n^{\frac 23}) O(n32),注意别忘了预处理前 n 2 3 n^{\frac 23} n32的 f f f的前缀和。
ll n;
int N,limt,prim[maxn],tot,s[maxn],dp[maxm];
bool flag[maxn];
int id(ll x){
return x<=limt?x:n/x+limt;
}
void init(int n){
s[1]=1;
FOR(i,2,n+1){
if(!flag[i])prim[tot++]=i,s[i]=1+mod-i;
for(register int j =0;j<tot && prim[j]*i<=n;++j){
flag[i*prim[j]]=1;
if(i%prim[j]==0){
s[i*prim[j]]=s[i];
break;
}
s[i*prim[j]]=1ll*s[i]*(1+mod-prim[j])%mod;
}
}
FOR(i,1,n+1){
s[i]=1ll*s[i]*i%mod;
add(s[i],s[i-1]);
}
}
int S(ll n){
if(n<=N)return s[n];
register int idd =id(n),ans,pre=1,cur=0;
if(dp[idd])return dp[idd];
register ll i=2,j;ans=sm1(n%mod);
while(i<=n){
j=n/(n/i);
dec(ans,1ll*((cur=sm2(j%mod))-pre+mod)*S(n/i)%mod);
i=j+1;
pre=cur;
}
return dp[idd]=ans;
}
int main(){
rd(&n);
N=pow(n,2.0/3.0);
init(N=max(N,10000));
register ll i=1,j;
register int pre=0,ans=0,cur=0;
while(i<=n){
j=n/(n/i);
add(ans,1ll*sm3(n/i%mod)*((cur=S(j))-pre+mod)%mod);
i=j+1;
pre=cur;
}
wrn(ans);
}