Powerful Number
Powerful Number
定义
一个数 $n$ 满足 $\forall p((p\in \mathbb{P} \wedge p|n )\rightarrow p^2|n )$,则称 $n$ 为Powerful Number(简称PN)。
显然,所有的PN都可表示为 $a^2b^3$ (其中 $(a,b)=1$ )的形式。
个数
- $n$ 以内的PN数是 $O(\sqrt{n})$ 个的。
证明:$n$ 以内PN数的个数 $\le \int_{1}^{\sqrt{n}}(\frac{n}{x^2})^{1/3}\text{ d}x=O(\sqrt{n})$。
求出 $n$ 以内的PN数可以暴力搜索质因数。
PN筛
通过 Powerful Number 可以求出一系列积性函数的前缀和。
假设我们要求 $\sum_{i=1}^nf(i)$,构造两个函数 $g,h$ 使得:
- $g$ 是积性函数。且 $g$ 的前缀和 $S_g(n)$ 容易求出。
- $\forall p\in \mathbb{P},g(p)=f(p)$。
- $f=g * h$。
那么,将原式变一变:
$$
\sum_{i=1}^n f(i) \ =\sum_ {i=1}^n\sum_{d|i }h(d) g ( \frac{i}{d} ) \ =\sum_{i=1}^n h(i)\sum_{j=1} ^ { \frac{n}{i} }g(j) \ =\sum_{i=1}^n h(i)S_g(\left \lfloor \frac{n}{i} \right \rfloor)
$$
观察一下 $h$ 的取值:可以发现 $f(p)=g(1)h(p)+g(p)h(1)=h(p)+g(p)$,又因为有 $g(p)=f(p)$,因此 $h(p)=0$。
显然 $h$ 是个积性函数,那么由积性函数的定义,对于 $h$ 的所有非 PN 数下标的取值均为 $0$。
我们只需快速求出所有 PN 数下标的 $h$ ,就可以了。
只需要求出 $h(p^k)$ 就可以了。这个可以通过推式子或者递推等解决。
时间复杂度一般是 $O(\sqrt{n})$ 的。