一些数论常识
积性函数
数论函数 \(f(x)\) 是 \(\mathbb{Z}_+\rightarrow\mathbb{C}\) 一组映射,若 \(f(x)\) 满足 \(f(1)=1\),\((a,b)=1\Rightarrow f(ab)=f(a)f(b)\),则称 \(f(x)\) 为积性函数,若 \(f(ab)=f(a)f(b)\) 对任意 \(a,b\) 都成立,则称之为完全积性函数。
一些常见的积性函数:
- 单位函数:\(\varepsilon(n)=\begin{cases}1 & n=1 \\ 0 & n\neq 1\end{cases}\)
- 幂函数:\(\text{Id}_k(n)=n^k\),\(k=1\) 时为恒等函数 \(\text{Id}(n)\),\(k=0\) 时为常数函数 \(\mathbf{1}(n)\)
- 除数函数:\(\displaystyle \sigma_{k}(n)=\sum_{d|n}d^k\),\(k=1\) 时为因数和函数 \(\sigma(n)\),\(k=0\) 时为因数个数函数 \(\sigma_0(n)\)
- 欧拉函数:\(\displaystyle \varphi(n)=\sum_{i=1}^n[(i,n)=1]=n\prod(1-\frac{1}{p_i})\)
狄利克雷卷积
是定义在数论函数间的一种二元运算:\(\displaystyle (f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})\)
性质:
-
若 \(f,g\) 是积性函数,\(f*g\) 也是积性函数
-
狄利克雷卷积满足 「交换律」、「结合律」、「对函数加法的分配律」,有单位元 \(\varepsilon\)
-
当 \(f(1)\neq 0\) 时有逆元 \(f^{-1}\):
\[f^{-1}(n)=\begin{cases} \displaystyle\frac{1}{f(n)} & n=1 \\ -\displaystyle\frac{1}{f(1)}\sum_{d|n,d>1}f(d)f^{-1}(\frac{n}{d}) & n> 1 \end{cases} \] -
积性函数必存在逆元,且逆元仍是积性函数
-
\(\text{Id}_k*\mathbf1=\sigma_k\)
-
\(\varphi * \mathbf 1=\text{Id}\)
莫比乌斯反演
定义莫比乌斯函数:
\(\mu(n)\) 有性质:\(\sum_{d|n}\mu(d)=\begin{cases} 1 & n=1\\ 0 & n\neq 1 \end{cases} \;\iff\; \mu * \mathbf1 = \varepsilon\)
莫比乌斯变换:\(\displaystyle f(n)=\sum_{d|n}g(d)\;\iff\;g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})\)
这等价于 \(f=g*\mathbf1,g=f*\mu\) 。
杜教筛
对于 \(f(x)\) ,要计算 \(S(n)=\sum_{i=1}^n f(i)\) 。
考虑构造 \(S(n)\) 关于 \(S(\lfloor\frac{n}{i}\rfloor)\) 的递推式:
于是递归求 \(S(n)\) 即可。
时间复杂度:\(\displaystyle\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor=\lfloor\frac{a}{bc}\rfloor\),从而总共会递归到 \(O(\sqrt n)\) 个值。令 \(L=\lfloor\sqrt n\rfloor\),递归到的 \(x\) 可分两类:
- \(x=1,2,...,L\),复杂度为 \(O(\sqrt L)\cdot L=O(n^\frac{3}{4})\)
- \(x=\lfloor\frac{n}{1}\rfloor,\lfloor\frac{n}{2}\rfloor,...,\lfloor\frac{n}{L}\rfloor\),复杂度为 \(\displaystyle O(\sum_{i=1}^L\sqrt\frac{N}{i})=O(n^{\frac{3}{4}})\)
设求 \(\displaystyle \sum_{i=1}^{n}(f*g)(i)\) 和 \(g(n)\) 的复杂度为 \(A(n)\) 和 \(B(n)\),则杜教筛的时间复杂度为 \(O(\sqrt nA(n)+n^{\frac{3}{4}}B(n))\) 。
在 \(S(n)\) 可以线性求出等情况下,可以通过预处理做到 \(O(n^{\frac{2}{3}})\) 。
Powerful Number 筛
要求积性函数 \(f(x)\) 的前缀和。
找到一个积性函数 \(g(x)\),满足 \(g(p)=f(p)\),且 \(g(x)\) 容易求前缀和。
令 \(h(x)=f(x)/g(x)\),则 \(f(p)=h(1)g(p)+h(p)g(1)=g(p)+h(p)\),则 \(h(p)=0\) 。根据积性函数性质,\(h(x)\) 只在 PN 处有非零值。
定义:对于一个数 \(n=\prod_i p_i^{c_i}\),称 \(n\) 是 Powerful Number 当且仅当 \(\forall i,c_i>1\) 。
性质:注意到 PN 均可以写成 \(a^2b^3\) 的形式,先枚举 \(a\),可以得到 \(n\) 以内的 PN 数量为
\[\int_1^\sqrt n \sqrt[3]{\frac{n}{x^2}}dx=O(\sqrt n) \]
于是
于是处理出 \(h(p^c)\) 的值,\(O(\sqrt n)\) 搜索出所有 \(h(d)\) 的值,然后杜教筛求出 \(g(i)\) 的前缀和即可。
如果一切都是好算的,可以直接做到 \(O(\sqrt n)\) 。
若 \(h(p^c)\) 不能直接公式计算,可以利用 \(h(p^c)=f(p^c)-\sum_{i=1}^c g(p^i)h(p^{c-i})\),做到 \(O(\pi(\sqrt n)\log^2 n)=O(\sqrt n\log n)\) 。杜教筛部分只需算一下 \(\sum_{i=1}^n g(i)\),然后记录所有访问到的 \(S(n)\) 即可,通常是 \(O(n^\frac{2}{3})\) 的。
Min_25 筛
又称「Extended Eratosthenes Sieve」,也是求积性函数前缀和。
要求所求的 \(f(n)\) 在质数处的值可以表示成 \(f(p)=\sum a_ip^i\) 的形式。
记号:
- \(p_i\) :第 \(i\) 个质数
- \(\text{lpf}(n)\):\(n\) 的最小质因数
设 \(S(n,i)\) 为 \([2,n]\) 中,\(\text{lpf}(x)>p_i\) 的 \(f(x)\) 之和。最终答案即 \(S(n,0)+f(1)\):
考虑求后面的 \(\displaystyle \sum_{i<j,\;p_j\leq n}f(p_j)\),即求 \(\displaystyle G(n)=\sum_{p_i\leq n}f(p_i)\),而减数 \(G(p_i)\) 可以直接朴素求出,注意到 \(f(p)=\sum a_ip^i\),考虑单独求每一项 \(p^k\) 的和。
设 \(g(n,i)\) 表示 \([2,n]\) 中,使用埃氏筛用前 \(i\) 个质数筛剩下来的数字的 \(x^k\) 之和,即
\(x^k\) 是完全积性函数,模拟埃氏筛过程,有
初始值 \(g(n,0)=\sum_{i=2}^n i^k\),可以直接按照公式或者插值求出。注意到涉及到的 \(n\) 是固定的 \(O(\sqrt N)\) 种,于是枚举 \(i\),每次同时转移这 \(O(\sqrt N)\) 个 \(g(n,i)\) 即可,\(g(p_{i-1},i-1)\) 部分则可以在预处理质数时顺便求出,另外与埃氏筛相同,对于一个 \(n\),\(p_i\leq \sqrt n\) 时才需要转移,转移是 \(O(1)\) 的,从而这里时间复杂度为 \(\displaystyle O(\sum_{1\leq i\leq \sqrt n}\left(\pi(\sqrt i)+\pi(\sqrt\frac{n}{i})\right))=O(\frac{n^{\frac{3}{4}}}{\ln n})\) 。
而前面计算 \(S(n,i)\) 的部分,只会调用到已经处理好的 \(O(\sqrt n)\) 个 \(G(n)\) 值,剩下的计算有两种方法:
-
注意到求和部分的转移几乎与 \(i\) 无关,从高到低枚举 \(i\),同时维护每个 \(n\) 对应的和式,每次添加一个数即可。转移 \(O(1)\),则复杂度同 \(G(n)\) 部分是 \(O(\frac{n^\frac{3}{4}}{\ln n})\) 的。
-
直接暴力 \(dfs\),在朱震霆集训队论文中说明了此算法复杂度是,满足 \(i\times big_i\leq n\) 的个数,\(big_i\) 是指 \(i\) 的最大质因数,实际复杂度为 \(O(\frac{n}{\log\log n})=\Theta(n^{1-\epsilon})\) 。
但是 \(n\leq 10^{13}\) 时具有比较好性质,首先对于所有 \(n\),当 \(big_i\geq n^{\frac{1}{4}}\) 时,满足 \(i\times big_i\leq n\) 的个数是 \(O(\frac{n^\frac 34}{\ln n})\) 的,而 \(n\leq 10^{13}\) 时,\(big_i\leq n^\frac14\) 满足条件的 \(i\) 亦只有 \(O(\sqrt n)\) 级别。从而实际运算量也是 \(O(\frac{n^\frac 34}{\ln n})\) 的。
从而总时间复杂度 \(\displaystyle O(\frac{n^\frac34}{\ln n})\) 。