我不会数学
费马小定理
若 \(p\) 为素数, 则 $a^{p - 1} \equiv1 (\bmod p) $
扩展欧几里得算法
求解 \(ax+by =\gcd(a,b)\) 的一组特解。
\(ax+by = c\) 有解的充要条件为 \(\gcd(a, b) | c\), 称为裴蜀定理。
\(ax+by = \gcd(a, b) = \gcd(b, a \bmod b) = bx'+(a \bmod b)y'\)
\(=bx'+(a - b \times \left\lfloor\dfrac{a}{b} \right\rfloor) y' = ay'+b(x' -\left \lfloor\dfrac a b \right\rfloor y')\) 。
对比等式两端,有 \(x = y', y = x' - \left \lfloor \dfrac a b \right \rfloor y'\) 。
根据扩欧求出 \(ax+by = \gcd(a, b)\) 的一组特解 \(x = x_0, y = y_0\) 后,根据 \(\Delta(ax)+\Delta(by) = 0\) ,可得 \(x = x_0+\dfrac{b}{d} k , y = y_0-\dfrac a d k\)。
逆元
- 若 p 为素数, 可根据 \(a^{p - 2} \equiv a^{-1} (\bmod p)\) 快速幂计算。 也可考虑递推:设已经求出 \([1,n - 1]\) 的逆元, 设 \(p = kn+r(0 \leq r < n)\), 则\(kn+r \equiv 0 (\bmod p) \Rightarrow n^{-1} \equiv -k r^{-1} = -\left\lfloor \dfrac p i \right\rfloor (p \bmod i)^{-1}\) 。
- 线性求任意 \(n\) 个数 \(a_i\) 的逆元:设 \(s_i\) 为 \(a\) 的前缀积, 算出 \(s_n^{-1}\) 后递推求 \(s_i^{-1}\), 根据 \(a_i^{-1} = s_{i-1} \times s_i^{-1}\) 计算。
- 若 \(a, p\) 互质,可由扩欧计算 \(ax+py =\gcd(a, p) = 1\) 的特解, \(x\) 就是 \(a^{-1}\)。
通过 exgcd,我们可以证明,\(ax \equiv b (\bmod p)\) 在 \(\gcd(a, p)\nmid b\) 时无解, 若有解,则有 \(\gcd(a, p)\) 个解, 而且可以写成 \(x_0 + \dfrac p{\gcd(a, p)}\) 的形式。
威尔逊定理
\((p-1)! \equiv -1 (\bmod p)\) 当且仅当 \(p\) 为素数。
Proof:当 \(p\) 为素数时, 除了 \(1\) 和 \(-1\), 其它都能与逆元两两配对, 故 \((p-1)! \equiv 1 \times (p - 1) \equiv - 1(\bmod p)\)。
- 当 \(p = q^2(q >2)\) 时:考虑 \(q\) 和 \(2q\), 显然相乘为 0.
- 当 \(p = 4\) :\(3! \equiv 2 (\bmod 4)\))
- 当 \(p\) 为大于 4 的非完全平方数:令 \(q\) 为 \(p\) 的最小素因子, 显然 \(q \neq \dfrac{p}q\), 故 \((p-1) \equiv 0(\bmod p)\)。
扩展形式:设 \((p^k!)_p\) 表示 \(p^k\) 以内所有与 \(p\) 互质的数的乘积,则有:
\((p^k!)_p \equiv \begin{cases} 1 \ \ \ \ \ \ \ p = 2 \and k \geq 3 \\ -1 \ \ \ \operatorname{otherwise}\end{cases}\)
Kummer定理
\(\dbinom{n+m} n\) 中素因子 \(p\) 的次数 \(v_p(\dbinom {n+m} n)\) 等于在 \(p\) 进制下 \(n\) 和 \(m\) 相加的进位次数。
Proof:很容易得到 $v_p(n!) = \sum\limits_{i = 1}^{\left \lfloor \log_p n \right \rfloor }\left \lfloor \dfrac{n}{p^i} \right \rfloor $。
我们尝试把 \(n\) 写成 \(p\) 进制 :设 \(c = \left \lfloor \log_p n \right \rfloor\), \(n = \sum\limits_{i = 0}^{c}a_ip^i\) ,则有:
\(v_p(n!) = \sum\limits_{i = 1}^{c}\sum\limits_{j = 0}^{c} \left\lfloor \dfrac{a_jp^j}{p^i}\right\rfloor\), 一番推导后得到 \(v_p(n!) = \dfrac{n - s_p(n)} {p - 1}\)。
例题:[WC2021] 斐波那契
欧拉函数 & 莫比乌斯函数
定义
欧拉函数 \(\varphi(n)\) 等于 \([1,n]\) 中与 \(n\) 互质的整数的个数。
设 \(n = p_1^{\alpha_1}p_2^{\alpha_2}\dots p_k^{\alpha_k}\), 则有 \(\varphi(n) = n \times \prod\limits_{i = 1}^{k}\dfrac{p_i - 1}{p_i}\)
性质
性质 1:若 \(p\) 为素数, 则 \(\varphi(p^k) =(p-1) \times p^{k-1}\)
性质 2:\(\varphi\) 是积性函数。
数论证法:
设 $a \perp b $, 与 \(a\) 互质的数的简化剩余系为 \(\{a_1, a_2, \dots,a_{\varphi(a)}\}\), 那么在 \([1,ab]\) 中与 \(a\) 互质的数可以写为 \(i \times a+a_j(0 \leq i < b, 0 \leq j \leq \varphi(a))\)。 由于 \(a \perp b\), 故 \(ia(0\leq i < b)\) 在模 \(b\) 意义下互不相同。 对于每一个 \(j\), \({i \times a +a_j}\) 构成了模 \(b\) 的完全剩余系, 其中与 \(b\) 互质的有 \(\varphi(b)\) 个, 根据乘法原理, 在 \([1,ab]\) 中与 \(ab\) 互质的有 \(\varphi(a)\varphi(b)\) 个。
或者直接按照定义亦可。
性质 3:若 \(a \mid b\), 则 \(\varphi(ab) = a\times \varphi(b)\) , \(\varphi(a) \mid \varphi(b)\) 。
性质 4:在 \([1,n]\) 中的 \(x\) 使得 \(\gcd(x,n)=d\) 的个数为 \(\varphi(\dfrac n d)\) 。
Proof:容易发现使得 \(\gcd(n,x) = d\) 的充要条件为 \(\gcd(\dfrac n d, \dfrac x d) = 1\), 个数为 \(\varphi(\dfrac n d)\)。
(扩展)欧拉定理:
\(a^b \equiv \begin{cases} a^{b \bmod \varphi(p)} \ \ \ \ \ \ \ \ \ \ \gcd(a, p) = 1 \\ a^b \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \gcd(a, p) \neq 1, b < \varphi(p) \\ a^{b \bmod \varphi(p)+\varphi(p)} \ \ \gcd(a, p) \neq 1, b \geq \varphi(p) \end{cases}\)
离散对数问题
即在 \(\bmod p\) 意义下求解 \(\log_a b\),等价于离散对数方程:
BSGS算法:全称为 Baby Step Gaint Step, 适用于 \(a, p\) 互质的情况。
利用了根号平衡的思想。
设 \(x = qB - r (1 \leq p \leq B, 1 \leq r \leq B)\) (当然也可以写成带余除法的形式,不过这有利于下面的求解)
则 \(a^x \equiv b (\bmod p) \Leftrightarrow a^{qB} \equiv ba^r\), 设 \(B = \sqrt{p}\) ,直接枚举 \(r\) ,把 \(ba^r\) 放入哈希表中,然后枚举 \(qB\) 在哈希表中寻找。
哈希表可以用 pb_ds 中的 gp_hash_table,注意头文件加上 #include<ext/pb_ds/assoc_container.hpp>
此时求得的是 \(x\) 的最小非负整数解。
扩展 BSGS:对于更 general 的情况:
设 \(d = \gcd(a,p)\) 不断把方程两边同时除以 \(d\) 得到 :\(\dfrac a da^{x - 1} \equiv \dfrac b p (\bmod \dfrac p d)\), 直到 \(a \perp p\), 若出现 \(d \nmid b\) 则无解。
注意要特判 \(b = 1\), 此时答案即为除以 \(d\) 的数量。
线性同余方程组
求解形如
的线性同余方程组。
当 \(m_i\) 两两互质时,使用普通中国剩余定理(CRT)即可:
CRT 的思想类似拉格朗日插值中基函数的构造:即对于每一个 \(m_i\), 我们企图求出一个函数 \(f_{i}\) 使得 当 \(p = m_i\) 时:\(f_i(x) \equiv a_i\), 否则为 \(0\)。
设 \(M = \prod m_i\) , \(c_i = \dfrac M m_i\), \(d_i\) 为 \(\dfrac M m_i\) 在模 \(m_i\) 意义下的逆元, 则有 \(x = \sum a_ic_id_i\)
当模数不互质时:
我们只需考虑如何把两个方程
合并起来即可。
由于 \(x\) 可以表示成 \(a_1 +pm_1\), 所以 \(a_1 + pm_1 \equiv a_2 (\bmod m_2)\) ,即 \(pm_1 +qm_2 = a_2 -a_1\) ,exgcd 求解即可。
合并后变成 \(x \equiv a_1 + pm_1 (\bmod \operatorname{lcm}(m_1,m_2))\)
Powerful Number 筛
用于高效求数论函数的前缀和。
-
定义:一个数 \(n\) 被称为 Powerful Number(简称 PN),当且仅当 \(n\) 所有的质因数的次数都 \(\geq 2\)
引理:若 \(n\) 是 PN, 则 \(n\) 可以写成 \(n = a^2b^3\) 的形式。
-
推论:\([1, n]\) 中的 PN 有 \(\sqrt{n}\) 个。
Proof:根据引理,考虑枚举 \(a\), 则合法的 \(b\) 为 \(\int_{0}^{\sqrt{n}}\sqrt{\dfrac{n}{a^2}}^3 = \sqrt{n}\)
根据推论, \([1,n]\) 的 PN 不超过 \(O(\sqrt{n})\) 级别, 故可以直接搜索 \([1,\sqrt{n}]\) 中的指因子个数。
算法流程:若要求数论函数 \(f\) 的前缀和, 将 \(f\) 写成 \(g * h\) 的形式, 要求 \(\forall p \in \operatorname{P} ,f(p) = g(p)\), 即 \(f\) 和 \(g\) 在素数时拟合,而且 \(g\) 的前缀和 \(G\) 容易求得。
因为 \(f(p) = g(1)h(p)+g(p)h(1) = h(p)+f(p) \to h(p) = 0\) , 故 \(h\) 只在 PN 处有值 。
于是我们要求的是 \(\sum\limits_{i = 1}^{n}f(i) = \sum\limits_{i=1}\sum\limits_{d|i}g(i)h(\dfrac{i}{d}) = \sum\limits_{i = 1}^{n}h(i)\sum\limits_{j = 1}^{\left \lfloor \frac{n}{j} \right \rfloor}g(j) = \sum\limits_{i \in \operatorname{PN_n}}h(i)G(\left \lfloor \dfrac{n}{i} \right \rfloor)\)
由于 \(g\) 的前缀和容易计算, 于是我们只用考虑 \(h(p^k)\) 怎么计算就行了。
-
暴力递推!因为有 \(h(1) = 1, h(p) = 0\), \(f(p^k) = \sum\limits_{i=0}^{k}g(p^i)h(p^{k-i})\) , 故
\[f(p^k) = h(p^k)+\sum\limits_{i=0}^{k-1}h(p^i)g(p^{k-i}) \\ h(p^k) = f(p^k) - \sum\limits_{i=0}^{k-1}h(p^i)g(p^{k-i}) \]复杂度为 \(O(\dfrac{\sqrt{n}}{\ln n} \times \log^2n) = O(\sqrt{n}\log n)\)
-
分析性质!这个需要结合题目。
LG 5325 【模板】Min_25筛
有 \(f(p^k) = p^k(p^k - 1)\), 我们构造 \(g(n) = n \varphi(n)\), 容易发现 \(g(p) = f(p)\), 这里只需要保证质数成立就可以了, 质数幂不用考虑, 可知:
我们考察 \(h(p^k)\) 和 \(h(p^{k - 1})\) 的关系,有
根据 \(h(p) = 0\) 可得:\(h(p^k) = (p-1)(k-1)p^k\), 于是就做到 \(O(1)\) 了。
【3.25省选模拟】求和
设函数 \(f_k(x)= \prod\limits_{i}(-1)^{a_i}[a_i \leq k]\),计算:
\(\sum\limits_{i = 1}^n\sum\limits_{j = 1}^n\sum\limits_{d= 1}^kf_d(\gcd(i, j))\)。
设 \(h(n) = \sum\limits_{d = 1}^kf_d(n)\),快进到 \(\sum\limits_{d= 1}^{n}h(d)(2(\sum\limits_{i = 1}^{\left\lfloor\frac n d\right\rfloor}\varphi(i)))- 1)\) 。
后面求 \(\varphi\) 的部分杜教筛即可,问题变成求 \(H(n) = \sum\limits_{i = 1}^{n}h(i)\) 。
考虑 PN,对于单个 \(d\),简单构造是 \(g= \mu\),于是可以简单推导出 \(h(p^k) = h(p^{k - 1})+(-1)^{k}[k \leq d]\)。\(\mu\) 的前缀和同样可以杜教筛。先对所有 PN 可以 \(\mathcal O(k\sqrt n)\) 计算 \(\sum\limits_{d = 1, p \in \mathrm{PN}}^{k}h_d(p)\) ,总时间复杂度 \(\mathcal O(k \sqrt n+n^{\frac 2 3})\)。
或者,不妨考虑贝尔级数,\(f_p(x) = 1+(-1)x+\dots(-1)^kx^k = \dfrac{1-(-x)^{k+1}}{1+x}\)
先杜教 \(\mu^2(x) = 1+x\) 后变成 \(1+(-1)^kx^{k+1}\) 的前缀和。
\(=\sum\limits_{i = 1}^{n^{\frac 1{k+1}}}(-1) \times i^{k+1}\),而 \(\sum\limits_{i= 1}^d n^{\frac 1 {d+1}} = \mathcal O(\sqrt n)\) ,直接暴力计算。
Min25 筛
另一种在亚线性时间复杂度内计算积性函数前缀和的工具。
要求:\(f(p)\) 是低次多项式,\(f(p^k)\) 容易计算。
Min25 筛分为两个步骤,一是类似埃氏筛的 DP 计算素数幂次的贡献,二是算合数的贡献。
第一部分:
设 \(g(i, j)\) 表示在 \([2,i]\) 内,被 \(1 - j\) 的素数筛掉后的剩下数(包括所有质数和最小质因子 \(>p_j\) 的数)的 \(k\) 次幂和(\(k\) 即计算低次多项式的每一次),可以递推求解:
\(g(i, j) = g(i, j - 1)-p_j^k(g(\left\lfloor\dfrac i{p_j}\right\rfloor, j -1) - g(p_{j - 1}, j - 1))\)。
\(g(i,j - 1)\) 是 \(>p_{j - 1}\) 的答案,从中减去最小质因子等于 \(p_j\) 的数贡献,则提取 \(p_j\) 后剩下的数的最小质因子也 \(\geq p_j\),最后除去 \(\leq p_{j - 1}\) 的贡献。
优化 1:按照 \(j\) 从小到大递推,可以滚动掉 \(j\) 一维,最终答案是 \(g(i,mxp)\)。
优化 2:合法的状态 \(i\) 一定是形如 \(\left\lfloor\dfrac{\left\lfloor\dfrac{n}{a}\right\rfloor}{b}\right\rfloor = \left\lfloor\dfrac{n}{ab}\right\rfloor\),只有 \(O(\sqrt{n} )\) 个,可以整除分块预处理。存储时当 \(\leq \sqrt{n}\) 直接存,当 \(> \sqrt{n}\) 时,\(\left\lfloor\dfrac{n}{a}\right\rfloor\) 唯一,因此存到 \(\left\lfloor\dfrac{n}a\right\rfloor\),不用 map。
优化 3;当 \(p_j^2 \geq i\) 时显然不会筛掉任何数,因此可以优化时间。
优化 4:\(g(p_{j - 1}, j - 1)\) 即所有 \([1, j- 1]\) 的 \(p_j\) 贡献,直接预处理。
该部分的总时间复杂度为 \(O(\dfrac{n^{\frac 3 4}}{\log n})\)。
第二部分:
设 \(s(i, j)\) 表示所有 $[2, i] $ 的数满足其最小质因子 \(>p_j\) 的积性函数和。转移:
\(s(i, j) = \sum_{k}g(i, mxp) - g(p_j, j) +\sum\limits_{p_o>p_j, p_o^2 \leq i}\sum\limits_{p_o^k \leq i}f(p_o^k)[(s(\left\lfloor\dfrac{i}{p_o^k}\right\rfloor), o)+(k>1)]\)
先对每个 \(k\) 计算质数幂次的贡献,可能会带有系数,然后再计算合数,枚举其最小质因子,当 \(k>1\) 时单独计算 \(f(p_o^k)\) 的贡献。
该部分的时间复杂度为 \(O(n^{1 - \epsilon})\),即大于任何一个 \(O(n^k)(0 < k<1)\),但是跑的不慢,在 \(n = 10^{10}\) 时也只需要 0.75 s。
SP20173 DIVCNT2
计算 \(\sum\limits_{i= 1}^{n}\sigma(i^2)\)。
由于 \(f(p^k) = 2k+1 = k+(k+1) = \mu^2 *\sigma\),因此 \(f= \mu^2 * \sigma\)
\(=\sum\limits_{d = 1}^{n}\sigma(d)\sum\limits_{i= 1}^{\left\lfloor\frac n d\right\rfloor}\mu^2(i)\)。
\(S\mu^2\) 容易计算,\(S\sigma\) 容易计算,于是答案可以计算。
SP20174 DIVCNT3
计算 \(\sum\limits_{i = 1}^{n}\sigma(i^3)\)。
考虑 PN,由于 \(f(p) = 4\),构造 \(g = \sigma *\sigma\) 即可,显然可以计算。
SP34096 DIVCNTK
计算 \(\sum\limits_{i = 1}^{n}\sigma(i^k)\)。
考虑 Min_25,显然 \(f(p^x) = kx+1\),\(f(p) = k+1\),显然满足 \(f(p)\) 是低次多项式,\(f(p^k)\) 容易计算。时间复杂度 \(\mathcal O(\dfrac{n^{0.75}}{\log n})\)。
各种函数前缀和
-
\(f(n) = \sum\limits_{d \mid n}\varphi(d)\varphi (\dfrac n d)\) 。\(f(n) = \sum\limits_{d |n}\mu(d)\mu(\dfrac n d)\)。
显然杜教筛随便算。
-
\(f(p^k) = p^k+1\)。
显然可以 PN。但答案是 \(\sum\limits_{i= 1}^{n}i\varphi(\left\lfloor\dfrac n i\right\rfloor)\) 直接杜教。
-
\(f(p^k) = p^e\)。
Min25。
-
\(f(p^k) = p^{k - [k \bmod r \neq 0]}\)。
\(g = I\),则 \(h(p^k) = f(p^k) - f(p^{k- 1})\),时间复杂度 \(\mathcal O(\sqrt n)\)。
-
\(f(p^k) = 2^{k}\) 。
$g = \sigma $,PN。发现 \(h(1) = 1, h(p^k) = 2^{k - 2}(k>1)\),时间复杂度 \(\mathcal O(n^{2/3})\)。
-
\(f(p^k) = \max c_i \times \min c_i\)。
当 \(\min c_i \geq 2\) 就是 PN,可以直接 \(\mathcal O(\sqrt n)\) 计算。
否则 \(f(p^k) = \max c_i\),考虑枚举 \(d\),计算 \(\sum\limits_{i = 1}^{n}[f(i) \leq d]\),考虑容斥,答案为 \(\sum\limits_{i = 1}^{n^{\frac 1{d+1}}}\mu(i){\left\lfloor\frac{n}{i^{d+1}}\right\rfloor}\),对 \(d \in [1, \log_2 n]\) 都算一遍的时间复杂度 \(\mathcal O(\sqrt n)\),与 P7277 平凡点滴 基本相同。
-
\(f(p^k) = p^{\left\lfloor\frac k 2\right\rfloor}\)。 PN显然可以 \(\mathcal O(n^{2/3})\) ,考虑有什么 \(\sqrt n\) 做法。我们发现有 \(f(n) = \sum\limits_{d^2 |n}\varphi(d)\),因此 \(\sum f(i) = \sum\limits_{d = 1}^{\sqrt n}\varphi(d) \left\lfloor\dfrac{n}{d^2}\right\rfloor\)
-
\(f(n) = \sum\limits_{d \mid n}\gcd(d, \dfrac n d)\)。
PN,\(g = \sigma\)。打出来 \(h\) 发现 \(h(p^{2k}) = \varphi(p^k), h(p^{2k+1})= 0\),因此合法的 PN 还得是完全平方数。
-
\(f(p^c) = \begin{cases} 2 \ \ \ \ \ p \equiv 1 (\bmod 4) \\ 0 \ \ \ \ \ \mathrm{otherwise}\end{cases}\)