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)\)。

Note - Powerful Number的更多相关文章

  1. 利用powerful number求积性函数前缀和

    好久没更博客了,先水一篇再说.其实这个做法应该算是杜教筛的一个拓展. powerful number的定义是每个质因子次数都 $\geq 2$ 的数.首先,$\leq n$ 的powerful num ...

  2. powerful number求积性函数前缀和

    算法原理 本文参考了 zzq's blog . \(\text{powerful number}\) 的定义是每个质因子次数都 \(\ge 2\) 的数,有个结论是 \(\ge n\) 的 \(\te ...

  3. Powerful Number 筛学习笔记

    Powerful Number 筛学习笔记 用途 \(Powerful\ number\) 筛可以用来求出一类积性函数的前缀和,最快可以达到根号复杂度. 实现 \(Powerful\ number\) ...

  4. Powerful Number 学习笔记

    定义 对于一个正整数 \(n\) ,若完全分解之后不存在指数 \(=1\) ,则称 \(n\) 为 \(\text{Powerful Number}\) . 可以发现的是,在 \([1,n]\) 中, ...

  5. [笔记] Powerful Number 筛

    定义 Powerful Number(以下简称 PN)筛类似于杜教筛,可以拿来求一些积性函数的前缀和. 要求: 假设现在要求积性函数 \(f\) 的前缀和 \(F(n)=\sum_{i=1}^nf(i ...

  6. Powerful Number 筛法

    我也不想学筛法了,可你考试时候出一个新筛法就不厚道了吧,我还开始以为这是杜教筛... $tips:$学完杜教筛立马学$Powerful \ Number$筛法,此筛法强悍如斯 $Powerful \ ...

  7. 【HDOJ6623】Minimal Power of Prime(Powerful Number)

    题意:给定大整数n,求其质因数分解的最小质数幂 n<=1e18 思路:常规分解算法肯定不行 考虑答案大于1的情况只有3种:质数的完全平方,质数的完全立方,以及p^2*q^3,p,q>=1三 ...

  8. powerful number筛

    心血来潮跑来实现以下这个东西 我们应该知道杜教筛的理论是 \(f * g=h\),那么问题在于如何找 \(g\). 之前的blog应该提到过可以令 \(g(p)=-f(p)\),这样一来 \(h\) ...

  9. leetcode bugfree note

    463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...

随机推荐

  1. Win10如何更改C:\Users\下的用户名

    详细操作步骤博文原址  : https://blog.csdn.net/wls666/article/details/103334152 但是,改完后会出现报错 这是微软应用商城出现问题  ,每次开机 ...

  2. CVE-2020-0786(永恒之黑) GetShell

    描述 Microsoft服务器消息块3.1.1(SMBv3)协议处理某些请求的方式中存在一个远程执行代码漏洞,也称为" Windows SMBv3客户端/服务器远程执行代码漏洞". ...

  3. system (color XX )函数详解:调整控制台颜色的命令

    1.指定控制台输出的颜色属性 2.颜色属性由两个十六进制数字指定 -- 第一个为背景,第二个则为前景.每个数字可以为以下任何值之一: 例如: "COLOR fc" 在亮白色上产生亮 ...

  4. Java基础(十)——枚举与注解

    一.枚举 1.介绍 枚举类:类的对象只有有限个,确定的.当需要定义一组常量时,强烈建议使用枚举类.如果枚举类中只有一个对象,则可以作为单例模式的实现. 使用 enum 定义的枚举类默认继承了 java ...

  5. Git命令中波浪号~与脱字符^的区别

    0.前言 波浪号~,英文名叫 tilde.脱字符^,英文名叫caret. 这两种符号常见于git reset的情景,简单的项目结构和操作一般不会涉及到两者之间的区别,似乎用哪个都可以.如果遇到比较繁杂 ...

  6. C#获取http图片

    public Image GetHttpImage(string url) { var client = new HttpClient(); var uri = new Uri(Uri.EscapeU ...

  7. 【记录一个问题】android下opencl中的event.getProfilingInfo()测速时间并不准确

    使用了类似的代码来做android下opencl的时间测试: cl::CommandQueue queue(context, devices[0], CL_QUEUE_PROFILING_ENABLE ...

  8. http状态码 200 304 404 503等

    浏览器采用http请求时,会封装http get等信息见下图请求头,然后服务器响应后回发一些信息,包括状态码,响应头,响应信息等等,如下图. 右上图可见两种状态码,一种是200 一种是304.其中20 ...

  9. CSS设置标签、图片放大、缩小、旋转、移动(tranform)

    CSS设置标签.图片放大.缩小.旋转.移动(tranform) 1.缩小和放大属性(scale) 格式:tranform:缩小类型(数值): 注意:缩小和放大都是 scale : 其中的值(0~1)代 ...

  10. Qt之简单绘图实现

    效果图:                                              可以实现打开图片,在打开的图片上画图,可以保存图片,以及橡皮擦,画笔调大调粗换色功能. 代码: XI ...