一些数论常识

积性函数

数论函数 \(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\) 都成立,则称之为完全积性函数。

一些常见的积性函数:

  1. 单位函数:\(\varepsilon(n)=\begin{cases}1 & n=1 \\ 0 & n\neq 1\end{cases}\)
  2. 幂函数:\(\text{Id}_k(n)=n^k\)\(k=1\) 时为恒等函数 \(\text{Id}(n)\)\(k=0\) 时为常数函数 \(\mathbf{1}(n)\)
  3. 除数函数:\(\displaystyle \sigma_{k}(n)=\sum_{d|n}d^k\)\(k=1\) 时为因数和函数 \(\sigma(n)\)\(k=0\) 时为因数个数函数 \(\sigma_0(n)\)
  4. 欧拉函数:\(\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})\)

性质:

  1. \(f,g\) 是积性函数,\(f*g\) 也是积性函数

  2. 狄利克雷卷积满足 「交换律」、「结合律」、「对函数加法的分配律」,有单位元 \(\varepsilon\)

  3. \(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} \]

  4. 积性函数必存在逆元,且逆元仍是积性函数

  5. \(\text{Id}_k*\mathbf1=\sigma_k\)

  6. \(\varphi * \mathbf 1=\text{Id}\)

 

莫比乌斯反演

定义莫比乌斯函数:

\[\mu(n)=\begin{cases} 1 & n=1 \\ 0 & n\;含有平方因子 \\ (-1)^k & k\;为\;n\;的本质不同质因子个数 \end{cases} \]

\(\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)\) 的递推式:

\[\sum_{i=1}^n(f*g)(i)=\sum_{i=1}^n\sum_{d|i}g(d)f(\frac{n}{d})=\sum_{i=1}^ng(i)S(\lfloor\frac{n}{i}\rfloor)\\ g(1)S(n)=\sum_{i=1}^n(f*g)(i)-\sum_{i=2}^ng(i)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\) 可分两类:

  1. \(x=1,2,...,L\),复杂度为 \(O(\sqrt L)\cdot L=O(n^\frac{3}{4})\)
  2. \(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) \]

于是

\[\sum_{i=1}^n f(i)=\sum_{i=1}^n\sum_{d|n}h(d)g(\frac{i}{d})\\=\sum_{d=1,\;d\;is\;PN}h(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}g(i) \]

于是处理出 \(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)\)

\[\begin{align} S(n,i)&=\sum_{2\leq j\leq n,\;\text{lpf}(j)>p_i}f(j)\\ &=\sum_{j>i}\sum_{c\geq 1,\;p_j^c\leq n}f(p_j^c)S(\lfloor\frac{n}{p_j^c}\rfloor,j)\\ &=\sum_{i<j,\;p_j\leq \sqrt n}\;\sum_{c\geq 1,\;p_j^c\leq n}f(p_j^c)\left(S(\lfloor\frac{n}{p_j^c}\rfloor,j)+[c>1]\right)+\sum_{i<j,\;p_j\leq n}f(p_j) \end{align} \]

考虑求后面的 \(\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\) 之和,即

\[g(n,i)=\sum_{2\leq x\leq n}[\text{isprime(x)}\vee\text{lpf}(x)>p_i]x^k \]

\(x^k\) 是完全积性函数,模拟埃氏筛过程,有

\[g(n,i)=g(n,i-1)-p_i^k\left(g(\lfloor\frac{n}{p_i}\rfloor,i-1)-g(p_{i-1},i-1)\right) \]

初始值 \(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})\)

posted @ 2022-03-09 19:14  Neal_lee  阅读(166)  评论(0编辑  收藏  举报