[模板] 数论题的一些经验
数论题多为一些求和/求值的题目, 多数可以通过莫比乌斯反演/筛法/恒等式等方法来解决.
下面是一些人生经验.
记 \(\epsilon(n) = [n=1]\), \(I(n) = 1\), \(id(n) = n\), \(S(n) = \sum_{i=1}^n i = \frac{n(n+1)}2\).
-
基本的点积/卷积:
- \(f * \epsilon = f \cdot I = f\)
- \(I * I = d\)
- \(id * id = id \cdot d\)
- \((f \cdot id) * id = id \cdot (f * I)\)
-
- 交换律, 结合律, 对加法分配律
- 完全积性函数, 点积对卷积有分配律:
\(f\) 完全积性 (如 \(id\), \(I\)), 那么有 \(f \cdot (g * h) = (g \cdot f) * (h \cdot f)\) - 逆运算:
- 对于数论函数 \(f\) 且 \(f(1) \not= 0\), 存在 \(g\) 为其逆函数, 即 \(f * g = \epsilon\);
- 特别的, \(\mu * I = \epsilon\), 即 \(\mu\) 为 \(I\) 的逆函数
-
关于函数的积性
- 积性函数的卷积是积性函数.
- 积性函数 \(f(x)\), \(g(x)\).
\(A(x) = f \cdot g = f(x)g(x)\) 是积性函数,
\(B(x) = (f \cdot g) * 1 = \sum_{i|x} f(i)g(i)\) 也为积性函数.
-
有关 \(\phi\) 和 \(\mu\)
- \(\phi * I = id\) (替换n)
- \(\mu * I = \epsilon\) (替换[n=1])
- \(\mu * id = \phi\) (
一般用到这个公式的时候都说明做麻烦了) - \((\phi \cdot id^k) * id^k = id^{k+1} \quad (\forall k \ge 0)\)
- \((\mu \cdot id^k) * id^k = \epsilon \quad (\forall k \ge 0)\)
- 记 \(P_s(v)\) 表示 \(v\) 的质因子集合, 则若 \(P_s(a) \supseteq P_s(b)\), 有 \(\phi(ab) = \phi(a) * b\)
- \(\phi (i^k) = i^{k-1} \phi(i)\)
- \(\sigma=\sigma*\epsilon=(I*id)*(I*\mu)=(I*I)*(id*\mu)=d*\phi\)
- \(\sigma\) 为约数和函数, 即 \(\sigma = id * I\)
-
求值方法:
- 正常方法(莫反/筛法)
- 调和级数\(O(n \log n)\)
- \(\sum_{i=1}^n \frac n{i^2} = O(\frac{\pi^2}6 \cdot n) \sim O(n)\)
- 积性函数筛(\(O(n)\))/单点求值(\(O(\log n * T)\))
- 关于卷积 \(h = f*g\) 的线性筛: [2]2
- 形式化的, 有
\[h(n) = \begin{cases} 1 & \text{if} & n = 1 \\ \sum_{d=0}^{k} f(p^d) g(p^{k-d}) & \text{if} & n = p^k \\ h(p^k)h(m) & \text{else let} & n = p^k m & \text{where} & \gcd(p^k, m) = 1 \end{cases} \]- 对于第二部分, 可以 \(O(k)\) 暴力维护.
- 在 [2] 中证明了这样的总时间复杂度为 \(O(n)\).
-
\[\sum_{i=1}^n i \cdot [(i,n)=1] = \frac{\phi(n)*n+\epsilon(n)}2 = \begin{cases} 1 & (n=1) \\ \frac{\phi(n)*n}2 & (n>1) \end{cases} \]
-
设 \(n=\prod_{i=1}^k p_i^{\alpha_i}\), 有
\[\sum_{d|n} \mu (d) \cdot d = \prod_{i=1}^k (1-p_i) \] -
(约数个数和)
\[d(ij)=\sum_{x|i}\sum_{y|j}[(x,y)==1] \] -
(约数研究)
\[\sum_{i=1}^n \left[ \frac{n}{i} \right] = \sum_{i=1}^n d(i) \] -
(luogu4902 乘积)
设 \(a_i = \left[ \frac{n}{i} \right]\). 若 \(x \rightarrow (x + 1)\), 那么\[a_i' = \begin{cases} a_i & (i \nmid (x+1)) \\ a_i + 1 & (i \mid (x+1)) \end{cases} \] -
有关约数的复杂度
\[\sum_{i=1}^n d(i) = O(n\log n) \](调和级数)
\[\sum_{i=1}^n d^2(i) = O(n\log^3 n) \](据 hihocoder #1867: GCD; 不会证)
-
其他的复杂度
- \(n \le 10^8\), \(d(n) \le 800\)
- \(n \le 10^{18}\), \(d(n) \le 10^5\)
- \(n \le 10^{8}\), \(\sum_{i=1}^n \phi(n) \le 4*10^{14}\)