http://acm.hdu.edu.cn/showproblem.php?pid=5608
sol:
简单杜教筛
设g(n)=n^2-3n+2,s(n)=
∑nif(i)
∑
i
n
f
(
i
)
g=f∗1
g
=
f
∗
1
g∗μ=f∗1∗μ=f∗e
g
∗
μ
=
f
∗
1
∗
μ
=
f
∗
e
f(n)=
∑d|ng(d)μ(nd)
∑
d
|
n
g
(
d
)
μ
(
n
d
)
s(n)=
∑ni∑d|ig(d)μ(id)
∑
i
n
∑
d
|
i
g
(
d
)
μ
(
i
d
)
s(n)=
∑ni∑nid=1g(d)μ(i)
∑
i
n
∑
d
=
1
n
i
g
(
d
)
μ
(
i
)
s(n)=
∑niμ(i)∑nid=1d2−3d+2
∑
i
n
μ
(
i
)
∑
d
=
1
n
i
d
2
−
3
d
+
2
右边那个东西拿去分块,左边的东西可以杜教筛求前缀和。右边的东西的2提出来变成2n/i,-3d就是求个-3(n)(n+1)/2,
∑ii2
∑
i
i
2
是一个3次的多项式,可以手推,也可以直接插值。
显然n<1e6的算500个也没事,预处理可以做到 500*1e3,1e9>=n>1e6的杜教筛
O(5n23)
O
(
5
n
2
3
)
思路和实现都比较简单,代码就不写了。
talk is cheap,but no code.