我是靠谱客的博主 强健黑裤,这篇文章主要介绍luogu SP20173 DIVCNT2 - Counting Divisors (square)背景:题目传送门:题意:思路:代码:,现在分享给大家,希望可以做个参考。

背景:

一道好题,根据大佬的 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=p1a1​​p2a2​​...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=p12a1​​p22a2​​...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∑n​j=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∑n​S⊆{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∑n​d∣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∑n​fi​=i=1∑n​(h∗σ)(i)=ij≤n∑​hi​σj​=i=1∑n​μi2​j=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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(271)

评论列表共有 0 条评论

立即
投稿
返回
顶部