我不会数学

费马小定理

\(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\)

逆元

  1. 若 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}\)
  2. 线性求任意 \(n\) 个数 \(a_i\) 的逆元:设 \(s_i\)\(a\) 的前缀积, 算出 \(s_n^{-1}\) 后递推求 \(s_i^{-1}\), 根据 \(a_i^{-1} = s_{i-1} \times s_i^{-1}\) 计算。
  3. \(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\),等价于离散对数方程:

\[a^x \equiv b (\bmod p) \]

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\) 的数量。

线性同余方程组

求解形如

\[\begin{cases} x \equiv a_1 (\bmod m_1) \\ x\equiv a_2 (\bmod m_2) \\ \dots \\ x \equiv a_k (\bmod a_k) \end{cases} \]

的线性同余方程组。

\(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 \equiv a_1 (\bmod m_1) \\ x \equiv a_2 (\bmod m_2) \]

合并起来即可。

由于 \(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)\) 怎么计算就行了。

  1. 暴力递推!因为有 \(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)\)

  2. 分析性质!这个需要结合题目。

LG 5325 【模板】Min_25筛

\(f(p^k) = p^k(p^k - 1)\), 我们构造 \(g(n) = n \varphi(n)\), 容易发现 \(g(p) = f(p)\), 这里只需要保证质数成立就可以了, 质数幂不用考虑, 可知:

\[f(p^k) = h(p^k) +\sum\limits_{i = 0}^{k - 1}h(p^i)p^{2k - 2i-1}(p - 1) \\ f(p^{k - 1}) = h(p^{k - 1})+\sum\limits_{i=0}^{k-2}h(p^i)p^{2k-2i-3}(p - 1) \]

我们考察 \(h(p^k)\)\(h(p^{k - 1})\) 的关系,有

\[p^2(f(p^{k-1})-h(p^{k-1}))+h(p^{k-1})p(p -1) = f(p^k) - h(p^k) \\ p^{2k}-p^{k+1}-ph(p^{k-1}) = p^{2k}-p^k-h(p^k) \\ h(p^k) - ph(p^{k-1}) = p^{k+1} - p^k \\ \dfrac{h(p^k)}{p^k} - \dfrac{h(p^{k-1})}{p^{k-1}} = p - 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}\)

posted @ 2022-10-01 21:42  henrici3106  阅读(53)  评论(0编辑  收藏  举报