概述
背景:
一道好题,根据大佬的
b
l
o
g
blog
blog学的。
题目传送门:
https://www.luogu.org/problemnew/show/SP20173
题意:
求
∑
i
=
1
n
σ
(
i
2
)
sum_{i=1}^{n}σ(i^2)
∑i=1nσ(i2)。
其中
σ
(
n
)
σ(n)
σ(n)表示
n
n
n的约数个数。
思路:
∑
i
=
1
n
σ
(
i
2
)
sum_{i=1}^{n}σ(i^2)
i=1∑nσ(i2)
考虑
x
=
p
1
a
1
p
2
a
2
.
.
.
p
k
a
k
x=p_1^{a_1}p_2^{a_2}...p_k^{a_k}
x=p1a1p2a2...pkak,则
σ
(
x
)
=
∏
i
=
1
k
(
a
i
+
1
)
σ(x)=prod_{i=1}^{k}(a_i+1)
σ(x)=∏i=1k(ai+1);
则
x
2
=
p
1
2
a
1
p
2
2
a
2
.
.
.
p
k
2
a
k
x^2=p_1^{2a_1}p_2^{2a_2}...p_k^{2a_k}
x2=p12a1p22a2...pk2ak,则
σ
(
x
)
=
∏
i
=
1
k
(
2
a
i
+
1
)
σ(x)=prod_{i=1}^{k}(2a_i+1)
σ(x)=∏i=1k(2ai+1)。
则原式子
=
∑
i
=
1
n
∏
j
=
1
k
(
2
a
j
+
1
)
=sum_{i=1}^{n}prod_{j=1}^{k}(2a_j+1)
=i=1∑nj=1∏k(2aj+1)
考虑
∏
j
=
1
k
(
2
a
j
+
1
)
prod_{j=1}^{k}(2a_j+1)
∏j=1k(2aj+1)的暴力求解,就是若干个
a
a
a与其它的
1
1
1暴力匹配,那不妨写成子集枚举的形式。
=
∑
i
=
1
n
∑
S
⊆
{
1
,
2
,
.
.
.
,
k
i
}
2
∣
S
∣
∏
j
∈
S
a
j
=sum_{i=1}^{n}sum_{S⊆{1,2,...,k_i}}2^{|S|}prod_{j∈S}{a_j}
=i=1∑nS⊆{1,2,...,ki}∑2∣S∣j∈S∏aj
事实上,若存在
a
j
=
0
a_j=0
aj=0,那就没有贡献。那有贡献的就是
i
i
i的约数。
每个约数的贡献是
2
ω
(
d
)
2^ω(d)
2ω(d),其中
ω
(
i
)
ω(i)
ω(i)表示
i
i
i的质因数个数,所以就有:
=
∑
i
=
1
n
∑
d
∣
i
2
ω
(
d
)
=sum_{i=1}^{n}sum_{d|i}2^{ω(d)}
=i=1∑nd∣i∑2ω(d)
其实把
ω
(
d
)
ω(d)
ω(d)看成每个质因数选或不选,就是
d
d
d的无平方约数的个数。则
2
ω
(
d
)
=
∑
p
∣
d
μ
2
(
p
)
2^{ω(d)}=sum_{p|d}{mu^2(p)}
2ω(d)=∑p∣dμ2(p)。
设
f
n
=
σ
(
n
2
)
,
g
n
=
2
ω
(
d
)
,
h
n
=
μ
2
(
n
)
f_n=σ(n^2),g_n=2^{ω(d)},h_n=mu^2(n)
fn=σ(n2),gn=2ω(d),hn=μ2(n)。
则有:
f
=
g
∗
I
,
g
=
h
∗
I
f=g*I,g=h*I
f=g∗I,g=h∗I(由上面的式子写成狄利克雷卷积的形式),
则有:
f
=
(
h
∗
I
)
∗
I
=
h
∗
(
I
∗
I
)
=
h
∗
σ
f=(h*I)*I=h*(I*I)=h*σ
f=(h∗I)∗I=h∗(I∗I)=h∗σ(狄利克雷卷积结合律),所以有:
∑
i
=
1
n
f
i
=
∑
i
=
1
n
(
h
∗
σ
)
(
i
)
=
∑
i
j
≤
n
h
i
σ
j
=
∑
i
=
1
n
μ
i
2
∑
j
=
1
⌊
n
i
⌋
σ
j
sum_{i=1}^{n}f_i=sum_{i=1}^{n}(h*σ)(i)=sum_{ij≤n}h_iσ_j=sum_{i=1}^{n}mu^2_isum_{j=1}^{lfloor frac{n}{i}rfloor}σ_j
i=1∑nfi=i=1∑n(h∗σ)(i)=ij≤n∑hiσj=i=1∑nμi2j=1∑⌊in⌋σj
显然我们就需要算出
μ
2
,
σ
mu^2,σ
μ2,σ的前缀和。
∑
i
=
1
n
σ
n
=
∑
i
=
1
n
⌊
n
i
⌋
sum_{i=1}^nσ_n=sum_{i=1}^{n}lfloor frac{n}{i}rfloor
∑i=1nσn=∑i=1n⌊in⌋
那么
∑
i
=
1
n
μ
i
2
sum_{i=1}^{n}mu_i^2
∑i=1nμi2的求法就是
[
1
,
n
]
[1,n]
[1,n]中无平方约数的个数和。
证明就是
μ
mu
μ函数的性质:一个数
x
x
x为完全平方数的整数倍时,
μ
x
=
0
mu_x=0
μx=0;否则
μ
x
=
±
1
,
μ
x
2
=
1
mu_x=±1,mu_x^2=1
μx=±1,μx2=1,所以得证。
考虑容斥原理,就有
∑
i
=
1
n
μ
i
2
=
∑
i
=
1
n
μ
i
⌊
n
i
2
⌋
sum_{i=1}^{n}mu_i^2=sum_{i=1}^{sqrt{n}}mu_ilfloorfrac{n}{i^2}rfloor
∑i=1nμi2=∑i=1nμi⌊i2n⌋。
等用于:完全平方数。
套在一起用整除分块即可。
代码:
goto
最后
以上就是强健黑裤为你收集整理的luogu SP20173 DIVCNT2 - Counting Divisors (square)背景:题目传送门:题意:思路:代码:的全部内容,希望文章能够帮你解决luogu SP20173 DIVCNT2 - Counting Divisors (square)背景:题目传送门:题意:思路:代码:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复