Live2D

Note - Powerful Number

Powerful Number

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

\[\begin{aligned} \sum_{i=1}^n[i\text{ is a P.N.}]&\le\sum_{i=1}^n\left(\frac{n}{i^2}\right)^{\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}}\text dx\\ &=n^{\frac{1}{3}}\left.\left(3x^{\frac{1}{3}}\right)\right|_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\) 使得 \(f\star g\) 的前缀和易于计算。我们转而引入一个在素数处“拟合” \(f\) 的积性函数 \(g\),即有

\[\forall p\in\mathbb P,~g(p)=f(p) \]

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

\[h=f\star g^{-1} \]

那么

\[\sum_{i=1}^nf(i)=\sum_{i=1}^nh(i)\sum_{j=1}^{\lfloor\frac{n}{i}\rfloor} g(j) \]

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

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

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

例题

「LOJ #6053」简单的函数

  Link.

  积性函数 \(f\) 满足 \(f(p^c)=p\oplus c~(p\in\mathbb P,c\in\mathbb N_+)\),求 \(\sum_{i=1}^n f(i)\bmod(10^9+7)\)

  \(n\le10^{10}\)


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

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

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

\[g(n)=\begin{cases} \varphi(n),&2\not\mid n\\ 3\varphi(n),&\text{otherwise} \end{cases} \]

显然它也是积性函数。

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

\[\begin{aligned} S(n)&=\sum_{i=1}^n\varphi(2i)\\ &=\sum_{i=1}^n[2\not\mid i]\varphi(i)+2\sum_{i=1}^n[2\mid i]\varphi(i)\\ &=S\left(\frac{n}{2}\right)+\sum_{i=1}^n\varphi(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 n\ln\ln\sqrt n)\)\(n\) 以内素数的倒数和的规模是 \(\mathcal O(\ln\ln n)\))个 \(h(p^c)\) 也预处理出来,最后 \(\mathcal O(\sqrt n)\) 搜索 Powerful Number 就能求出答案啦!

  代码可见我的博客

「洛谷 P5325」Min_25 筛

  Link.

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

  \(n\le10^{10}\)


  Min_25 筛是不可能的。

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

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

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

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

\[\begin{aligned} \lbrack(\operatorname{id}\cdot\varphi)\star\operatorname{id}\rbrack(n)&=\sum_{i\mid n}(\operatorname{id}\cdot\varphi)(i)\cdot\frac{n}{i}\\ &=\sum_{i\mid n}n\varphi(i)\\ &=n^2 \end{aligned} \]

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

\[S(n)=\frac{n(n+1)(2n+1)}{6}-\sum_{i=2}^niS\left(\lfloor\frac{n}{i}\rfloor\right) \]

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

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

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

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

\[\begin{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\),那么

\[\begin{aligned} \lbrack z^k\rbrack 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. 预处理/在线求 \((f\star g^{-1})(p^k)\),可以暴力计算或尝试 Bell 级数;
    4. 爆搜 Powerful Number 统计答案。
  • 此筛法是否优秀大部分取决于第三步,即能否快速计算 \((f\star g^{-1})(p^k)\)
posted @ 2021-04-14 21:46  Rainybunny  阅读(115)  评论(0编辑  收藏  举报