zoukankan      html  css  js  c++  java
  • Note

    Powerful Number

      对于 (ninmathbb N_+),若不存在素数 (p) 使得 (pmid n~land~p^2 otmid n),则称 (n) 为 Powerful Number。即,(n) 的每个素因子至少以二次的形式存在。不难发现,任何一个 Powerful Number (n) 都可以写成 (a^2b^3~(a,binmathbb N_+)) 的形式(但不唯一)。接下来,我们研究其在正整数前缀序列中出现次数的规模,有

    [egin{aligned} sum_{i=1}^n[i ext{ is a P.N.}]&lesum_{i=1}^nleft(frac{n}{i^2} ight)^{frac{1}{3}}\ &=n^{frac{1}{3}}sum_{i=1}^ni^{-frac{2}{3}}\ &le n^{frac{1}{3}}int_1^nx^{-frac{2}{3}} ext dx\ &=n^{frac{1}{3}}left.left(3x^{frac{1}{3}} ight) ight|_1^{n^{frac{1}{2}}}\ &=mathcal O(n^frac{1}{2}) end{aligned} ]

    所以 (n) 以内的 Powerful Number 的数量是 (mathcal O(sqrt n)) 级别,因此引出了基于 Powerful Number 数量的神奇筛法。

    Powerful Number 筛法

      给出任意的积性函数 (f),求

    [sum_{i=1}^nf(i) ]

      若按照正常杜教筛的方法,我们很可能无法找到一个 (g) 使得 (fstar g) 的前缀和易于计算。我们转而引入一个在素数处“拟合” (f) 的积性函数 (g),即有

    [forall pinmathbb P,~g(p)=f(p) ]

    同时保证 (g) 的前缀和易于计算。接着构造出类似杜教筛的卷积形式,令

    [h=fstar g^{-1} ]

    那么

    [sum_{i=1}^nf(i)=sum_{i=1}^nh(i)sum_{j=1}^{lfloorfrac{n}{i} floor} g(j) ]

      有何特别之处呢?考虑任意素数 (p)

    [f(p)=g(p)+h(p)=g(p)~~~~Rightarrow~~~~h(p)=0 ]

    (g)(f=gstar h) 均为积性函数,所以 (h) 为积性函数,况且 (h(p)) 恒为 (0),所以使得 (h(a) ot=0)(a) 为 Powerful Number!我们只需要预处理出 (mathcal O(sqrt n))(g) 的前缀和,再大力搜索不为 (0)(h(a)),就能算出上式的结果啦!

    例题

    「LOJ #6053」简单的函数

      Link.

      积性函数 (f) 满足 (f(p^c)=poplus c~(pinmathbb P,cinmathbb N_+)),求 (sum_{i=1}^n f(i)mod(10^9+7))

      (nle10^{10})


      首先,考虑 (f) 的素数点值:

    [f(p)=egin{cases} 3,&p=2\ p-1,& ext{otherwise} end{cases} ]

    (p-1) 联想到 (varphi(p)=p-1),可惜 (varphi(2)=1)。干脆一点,我们直接强行把 (varphi) 的偶数点值乘上 (3),令

    [g(n)=egin{cases} varphi(n),&2 otmid n\ 3varphi(n),& ext{otherwise} end{cases} ]

    显然它也是积性函数。

      接着,求 (g) 的前缀和。其前缀和为 (varphi) 的前缀和加上两倍偶数点的 (varphi) 前缀和。记

    [egin{aligned} S(n)&=sum_{i=1}^nvarphi(2i)\ &=sum_{i=1}^n[2 otmid i]varphi(i)+2sum_{i=1}^n[2mid i]varphi(i)\ &=Sleft(frac{n}{2} ight)+sum_{i=1}^nvarphi(i) end{aligned} ]

    杜教筛处理 (varphi) 的前缀,(S) 就能在可观(我不会算 qwq)的复杂度内预处理出来,继而也得到了 (g)(mathcal O(sqrt n)) 个前缀和。

      此外,我们还需要求 (h(i)),即求 (h(p^c)~(c>1))。考虑 (f(p^c)) 与它的关系:

    [f(p^c)=sum_{i=0}^ch(p^i)g(p^{c-i})\ Rightarrow~~~~h(p^c)=f(p^c)-sum_{i=0}^{c-1}h(p^i)g(p^{c-i}) ]

    顺手把 (mathcal O(sqrt nlnlnsqrt n))(n) 以内素数的倒数和的规模是 (mathcal O(lnln n)))个 (h(p^c)) 也预处理出来,最后 (mathcal O(sqrt n)) 搜索 Powerful Number 就能求出答案啦!

      代码可见我的博客

    「洛谷 P5325」Min_25 筛

      Link.

      对于积性函数 (f(x)),有 (f(p^k)=p^k(p^k-1)~(pinmathbb P,kinmathbb N_+))。求 (sum_{i=1}^nf(i)mod(10^9+7))

      (nle10^{10})


      Min_25 筛是不可能的。

      Powerful Number 三步走咯!考虑素数点值:

    [f(p)=p^2-p ]

    那么令 (g=operatorname{id}cdotvarphi)(点乘号即数值相乘),就有 (g(p)=p^2-p)。积性函数的点乘亦为积性函数。

      求 (g) 的前缀和,杜教筛基础操作,卷上一个 (operatorname{id})

    [egin{aligned} lbrack(operatorname{id}cdotvarphi)staroperatorname{id} brack(n)&=sum_{imid n}(operatorname{id}cdotvarphi)(i)cdotfrac{n}{i}\ &=sum_{imid n}nvarphi(i)\ &=n^2 end{aligned} ]

    自然数平方和易求,丢到杜教筛的式子里,推导后得出

    [S(n)=frac{n(n+1)(2n+1)}{6}-sum_{i=2}^niSleft(lfloorfrac{n}{i} floor ight) ]

    其中 (S(n)) 即为 (sum_{i=1}^ng(i))

      求 (h(p^k)),可以用 Bell 级数推导。令 (F_p,G_p,H_p) 分别为 (f,g,h) 在某一素数 (p) 的 Bell 级数,则

    [egin{cases} F_p=operatorname{OGF}langle1,p(p-1),p^2(p^2-1),cdots angle=frac{1}{1-p^2z}-frac{1}{1-pz}+1\ G_p=operatorname{OGF}langle1,p(p-1),p^3(p-1),cdots angle=frac{1-pz}{1-p^2z} end{cases} ]

    应用“两函数 Bell 级数的乘法卷积”为“原函数 Dirichlet 卷积之 Bell 级数”的性质,得到

    [egin{aligned} H_p&=frac{F_p}{G_p}\ &=frac{frac{1}{1-p^2z}-frac{1}{1-pz}+1}{frac{1-pz}{1-p^2z}}\ &=frac{1-frac{1-p^2z}{1-pz}+1-p^2z}{1-pz}\ &=frac{1}{1-pz}-frac{1-p^2z}{(1-pz)^2}+frac{1-p^2z}{1-pz}\ end{aligned} ]

    我们仅仅想求 (h(p^k)),即 ([z^k]H_p),那么

    [egin{aligned} lbrack z^k brack H_p&=[z^k]frac{1}{1-pz}-[z^k]frac{1-p^2z}{(1-pz)^2}-[z^k]frac{1-p^2z}{1-pz}\ &=p^k-[(k+1)p^k-kp^{k+1}]+(p^k-p^{k+1})\ &=(k-1)(p^{k+1}-p^k) end{aligned} ]

      最终,(mathcal O(n^{frac{2}{3}})) 就能求出答案啦。

      代码可见我的博客

    总结

    • Powerful Number 指每个素因子至少是二次的正整数;
    • ([1,n]) 内的 Powerful Number 个数为 (mathcal O(sqrt n))
    • Powerful Number 筛法的步骤为:
      1. 对于 (f),找到素数点值与其相同的,方便求前缀和的函数 (g)
      2. 预处理/在线求 (g)(mathcal O(sqrt n)) 个前缀和;
      3. 预处理/在线求 ((fstar g^{-1})(p^k)),可以暴力计算或尝试 Bell 级数;
      4. 爆搜 Powerful Number 统计答案。
    • 此筛法是否优秀大部分取决于第三步,即能否快速计算 ((fstar g^{-1})(p^k))
  • 相关阅读:
    【BZOJ1123】 [POI2008]BLO (tarjan)
    【距离GDKOI:44天&GDOI:107天】【BZOJ1040】[ZJOI2008] 骑士 (环套树DP)
    【距离GDOI:128天】【POJ2778】DNA Sequence(AC自动机+矩阵加速)
    【BZOJ1030】[JSOI2007]文本生成器
    【距离GDOI:130天】 AC自动机ing
    【距离GDOI:131天】 后缀数组完毕
    【SPOJ220】Relevant Phrases of Annihilation (SA)
    【POJ3294】 Life Forms(SA)
    【POJ3415】 Common Substrings (SA+单调栈)
    笔记本
  • 原文地址:https://www.cnblogs.com/rainybunny/p/14660050.html
Copyright © 2011-2022 走看看