LibreOJ - 6053(积性函数前缀和,pn筛角度)

Posted 吃花椒的妙酱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LibreOJ - 6053(积性函数前缀和,pn筛角度)相关的知识,希望对你有一定的参考价值。

题意:

n<=1e10
思路: 积性函数性质,pn筛角度
易知f(i)是积性函数。
f = g ∗ h , 其中 ∗ 表示狄利克雷卷积 f = g*h,其中*表示狄利克雷卷积 f=gh,其中表示狄利克雷卷积
试着构造一下h和g,由于 f ( p ) = p − 1 = φ ( p ) , p > 2 p + 1 , p = 2 f(p)=\\begincasesp-1=\\varphi(p)&,p>2\\\\p+1&,p=2\\endcases f(p)=p1=φ(p)p+1,p>2,p=2
考虑p=2时,f固定有f(2^k)的贡献,构造 g ( x ) = φ ( x ) , x ∤ 2 3 φ ( x ) , x ∣ 2 g(x)=\\begincases\\varphi(x)&,x\\nmid2\\\\3\\varphi(x)&,x\\mid2\\endcases g(x)=φ(x)3φ(x),x2,x2
由积性函数定义,有 f ( p ) = h ( p ) g ( 1 ) + h ( 1 ) g ( h ) 和 f ( 1 ) = h ( 1 ) g ( 1 ) , 而 h ( p ) = f ( p ) , 所以 h ( p ) = 0 , h ( 1 ) = 1 f(p)=h(p)g(1)+h(1)g(h)和f(1)=h(1)g(1),而h(p)=f(p),所以h(p)=0,h(1)=1 f(p)=h(p)g(1)+h(1)g(h)f(1)=h(1)g(1),h(p)=f(p),所以h(p)=0,h(1)=1
也就是说h(x)只可能在x为powerful number时取到非零数,而pn数量级是 n \\sqrtn n 的,考虑pn筛。
∑ i = 1 n f ( i ) = ∑ i = 1 n h ( i ) ∑ j = 1 ⌊ n i ⌋ g ( j ) \\sum_i=1^nf(i)=\\sum_i=1^nh(i)\\sum_j=1^\\lfloor\\fracni\\rfloorg(j) i=1nf(i)=i=1nh(i)j=1ing(j)
接下来是g(i)的前缀和如何快速求
∑ i = 1 n g ( i ) = ∑ i = 1 n φ ( i ) + 2 ∑ i = 1 ⌊ n 2 ⌋ φ ( 2 i ) \\sum_i=1^ng(i) =\\sum_i=1^n\\varphi(i)+2\\sum_i=1^\\lfloor\\fracn2\\rfloor\\varphi(2i) i=1ng(i)=i=1nφ(i)+2i=12nφ(2i),前半部分用杜教筛可以在 O ( n 2 3 ) 解决。 O(n^\\frac23)解决。 O(n32)解决。
现在解决后面的求和问题,我们设 S ( n ) = ∑ i = 1 n φ ( 2 i ) S(n)=\\sum_i=1^n\\varphi(2i) S(n)=i=1nφ(2i)
利用积性函数性质并且尽量往前缀和上靠
当n为偶数时,考虑把 φ ( 2 i ) 的 i 分为奇数和偶数两部分求和 \\varphi(2i)的i分为奇数和偶数两部分求和 φ(2i)i分为奇数和偶数两部分求和
S ( n ) = ∑ i = 1 n 2 ( φ ( 2 i ) + φ ( 2 ( n + i ) ) = ∑ i = 1 n 2 ( φ ( 2 ( 2 i − 1 ) ) + φ ( 2 ∗ 2 i ) ) = ∑ i = 1 n 2 ( φ ( 2 i − 1 ) + 2 φ ( 2 i ) ) = ∑ i = 1 n 2 ( φ ( 2 i − 1 ) + φ ( 2 i ) ) + ∑ i = 1 n 2 φ ( 2 i ) = ∑ i = 1 n φ ( i ) + S ( n 2 ) S(n)=\\sum_i=1^\\fracn2(\\varphi(2i)+\\varphi(2(n+i))\\\\=\\sum_i=1^\\fracn2(\\varphi(2(2i-1))+\\varphi(2*2i))\\\\=\\sum_i=1^\\fracn2(\\varphi(2i-1)+2\\varphi(2i))\\\\=\\sum_i=1^\\fracn2(\\varphi(2i-1)+\\varphi(2i))+\\sum_i=1^\\fracn2\\varphi(2i)\\\\=\\sum_i=1^n\\varphi(i)+S(\\fracn2) S(n)=i=12n(φ(2i)+φ(2(n+i))=i=12n(φ(2(2i1))+φ(22i))=i=12n(φ(2i1)+2φ(2i))=i=12n(φ(2i1)+φ(2i))+i=12nφ(2i)=i=1nφ(i)+S(2n)
当n为奇数时,考虑往上面的式子转化
S ( n ) = S ( n − 1 ) + φ ( 2 n ) S(n)=S(n-1)+\\varphi(2n) S(n)=S(n1)+φ(2n),而S(n-1)上面已经推出来了
继续化简
S ( n ) = S ( n − 1 2 ) + ∑ i = 1 n − 1 φ ( i ) + φ ( 2 n ) = S ( n − 1 2 ) + ∑ i = 1 n − 1 φ ( i ) + φ ( n ) ( 2 和 n 互质 ) = S ( n − 1 2 ) + ∑ i = 1 n φ ( i ) S(n)=S(\\fracn-12)+\\sum_i=1^n-1\\varphi(i)+\\varphi(2n)\\\\=S(\\fracn-12)+\\sum_i

以上是关于LibreOJ - 6053(积性函数前缀和,pn筛角度)的主要内容,如果未能解决你的问题,请参考以下文章

一类积性函数的前缀和---刷题记录

算法专题积性函数

浅谈一类积性函数的前缀和(转载)

min25

POJ 2480 Longge&#39;s problem 积性函数

powerful number 筛