基础数论

Upd on 2023.1.12 添加了整除分块和莫比乌斯反演。
Upd on 2023.7.22 重新排版,添加、删去了一些内容,修改了一些晦涩难懂的描述,开放阅读。

$$\huge\textbf{0x01}\ \large\textbf{数论入门}$$

试除法

判断一个数 \(n\) 是否为质数,可以从定义出发。暴力地把 \(2\sim n-1\) 的数都验证一遍,如果可以整除,那么该数为合数。否则为质数。
考虑优化:因为一个数 \(n\) 至少有一个 \(\le \sqrt{n}\) 的因数,所以每次只需要验证 \(2\sim \sqrt{n}\) 之间的数即可。证明:如果一个数 \(n\) 只有 \(\sqrt{n}+1\sim n\) 之间的因数,那么 \(n\) 与这个因数的商也是 \(n\) 的因数。这个因数的取值范围是 \(2\sim \sqrt{n}\) 的,与假设矛盾,得证。时间复杂度:\(O(\sqrt{n})\)

欧几里得算法(辗转相除法)

这种算法可以求得 \(a,b\) 的最大公约数 \(\gcd(a,b)\)
\(a=a'\times\gcd(a,b),b=b'\times\gcd(a,b)\),由最大公约数的定义,\(a'\)\(b'\) 显然互质。可以据此推导出 \(a'-b'\)\(b'\) 互质,得到 \(\gcd(a,b)=\gcd[(a'-b')\times\gcd(a,b),b'\times\gcd(a,b)]=\gcd(a-b,b)\)。重复上述操作直到不能再减。此时有 \(\gcd(a,b)=\gcd(a\bmod b,b)\)。时间复杂度:\(O(\log n)\)

筛法求素数

筛法可以在 \(\Theta(n)\) 的时间内求出 \(1\sim n\) 中的每个数是否为质数。
最裸的暴力就是对于每个数,暴力枚举把他的所有倍数都筛掉。这样的复杂度是 \(\Theta(\log\log n)\) 的,接近于线性,但是不是最优的。考虑优化筛的过程使得每个数都会且仅会被它的最小质因数筛掉。这样复杂度就是线性的了。时间复杂度:\(O(n)\)

欧拉函数

定义欧拉函数 \(\varphi (n)=\sum_{i=1}^n[\gcd(i,n)=1]\)
\(n=b_1^{a_1}b_2^{a_2}\cdots b_m^{a_m}\),则 \(\varphi(n)=n\prod_{i=1}^m(1-\dfrac{1}{b_i})\)
证明:考虑容斥。\(1\sim n\) 中,和 \(b_1\) 不互质的数有 \(\dfrac{n}{b_1}\) 个,和 \(b_2\) 不互质的数有 \(\dfrac{n}{b_2}\) 个,依此类推。同时和 \(b_1,b_2\) 不互质的数有 \(\dfrac{n}{b_1b_2}\) 个,同时和 \(b_2,b_3\) 不互质的数有 \(\dfrac{n}{b_2b_3}\) 个,等等。据此可以得到通项公式:

\[\large\varphi(n)=n+\sum_{S\in\{b_i\}}(-1)^{|S|}\dfrac{n}{\prod_{j\in S}j}=n(1+\sum_{S\in\{b_i\}}\dfrac{(-1)^{|S|}}{\prod_{j\in S}j})=n(1+\sum_{S\in\{b_i\}}\prod_{j\in S}(-\dfrac{1}{j}))=n\prod_{i=1}^m(1-\dfrac{1}{b_i}) \]

特别地,可以用线性筛法求出欧拉函数的值,这个会在后文中有所介绍。

欧拉定理

\(a ⊥ p\),则有 \(a^{\varphi(p)}\equiv 1\pmod{p}\)

扩展欧拉定理

\(a^x\equiv a^{x \operatorname{mod} \varphi(n)+\varphi(n)}\pmod{n}\)

费马小定理

\(a⊥p\),则 \(a^{p-1}\equiv 1\pmod p\),即 \(a^{p}\equiv p\pmod p\)

扩展欧几里得算法

这种算法可以求得一组解 \(x,y\) 使得 \(ax+by=\gcd(a,b)\)
\(bx'+(a\bmod b)y'=\gcd(b,(a\bmod b))\),因为 \(\gcd(a,b)=\gcd(b,(a\bmod b))\),所以 \(ax+by=bx'+(a\bmod b)y'\)。因为 \(a\bmod b=a-\lfloor\dfrac{a}{b}\rfloor\times b\),所以 \(ax+by=bx'+(a-\lfloor\dfrac{a}{b}\rfloor\times b)y'\)。整理得 \(ax+by=ay'+b(x'-\lfloor\dfrac{a}{b}\rfloor\times y')\),有 \(x=y',y=(x'-\lfloor\dfrac{a}{b}\rfloor\times y')\)。这样就可以根据 \(x',y'\) 的值求解 \(x,y\) 的值了。

乘法逆元

如果 \(ax\equiv 1\pmod{p}\),且\(\gcd(a,p)=1\),则称 \(a\) 关于 \(p\) 的乘法逆元为 \(x\)。把上面的式子稍微变形得到 \(ax\equiv \gcd(a,p)\pmod{p}\),即 \(ax+py=\gcd(a,p)\)。使用扩展欧几里得算法。
小性质:\(\dfrac{a}{b}\bmod p = a\times inv(b) \bmod p\)。特殊地,如果模数 \(p\) 为质数,就可以用费马小定理和快速冥求解逆元。

线性递推阶乘逆元

\(i\times \dfrac{1}{i!}\pmod p=\dfrac{1}{(i-1)!}\pmod p\)。正确性显然。

Miller-Rabin素数判断

先来证明引理:对于 \(a^2\equiv1\pmod p\),有 \(a\equiv 1\pmod p\)\(a\equiv n-1\pmod p\)
证明:因为 \(a^2\equiv 1\pmod p\),有 \(a^2-1\equiv 0\pmod p\),可以得到 \((a+1)(a-1)\equiv 0\pmod p\)。所以有 \(a-1\equiv 0\pmod p\)\(a+1\equiv 0\pmod p\)。得证。费马小定理告诉我们,对于素数 \(p\),有 \(a^{p-1}\equiv 1\pmod p\),那是否满足 \(\forall a,a^{p-1}\equiv 1\pmod p\)\(p\) 均为质数?有人给出了反例。尽管这么判是错的,但是可以通过 Miller-Rabin 算法 使得这么判断的出错率降为极小。
要验证 \(p\) 是否为素数,则把 \(p-1\) 分解成 \(2^tk\)的形式,接着,我们随一个 \(a\),用快速冥算出 \(a^k\pmod p\),然后让这个数不断自乘 \(t\) 次。最后得到的结果为 \(a^{2^tk} \pmod p\),即 \(a^{p-1}\pmod p\)。如果该数不为 \(1\),则 \(p\) 为合数。
这里注意,尽管满足 \(\forall a,a^{p-1}\equiv 1\pmod p\)\(p\) 不一定是质数,但是不满足该性质的 \(p\) 一定不是质数!
在自乘过程中,如果自乘后的数满足 \(\equiv 1\pmod p\),但是原数不满足 \(\equiv 1\pmod p\)\(\equiv n-1\pmod p\),那么该数也是合数,反之,该数通过了一次测试。先人的智慧告诉我们,如果一个数通过了一次测试,那么他不是质数的概率是 \(25\%\)。那么我们随 \(4\) 次,该数不是质数的概率约为 \(0.3\%\)。随 \(6\) 次的话,概率约为 \(0.02\%\)。概率已经很小了。时间复杂度为 \(\log^2n\)

中国剩余定理

求解同余方程
个人感觉用处不是特别大。可以直接看扩展中国剩余定理。

\[\Large\begin{cases}x \equiv b_1 & \pmod{a_1}\\x \equiv b_2 & \pmod{a_2}\\ \vdots\\x \equiv b_m & \pmod{a_m}\end{cases} \]

其中的 \(b_i\) 两两互质
\(M=\prod_{i-1}^m b_i,B_i=\dfrac{M}{b_i},t_iB_i\equiv 1\pmod {b_i}\),则有解 \(x=a_iB_it_i\)

扩展中国剩余定理

求解同余方程

\[\Large\begin{cases}x \equiv b_1 & \pmod{a_1}\\x \equiv b_2 & \pmod{a_2}\\ \vdots\\x \equiv b_m & \pmod{a_m}\end{cases} \]

如果我们已经求出了一个可行的解 \(x_m\),那么 \(x_m+\operatorname{lcm}_{i=1}^{m}i\) 也是可行的。同样地,如果我们已经求出了满足前 \(k\) 个同余方程的一个解 \(x_k\),那么 \(x_k+\operatorname{lcm}_{i=1}^{k}i\) 也满足前 \(k\) 个同余方程。现在考虑如何从 \(x_k\) 转移到 \(x_{k+1}\)。令 \(s=\operatorname{lcm}_{i=1}^{k}\)\(x_{k+1}=x_k+c_k\times s\)。则有 \(x_k+c_k\times s\equiv b_{k+1}\pmod{a_{k+1}}\)。移项得 \(c_k\times s+d_k\times a_{k+1}= b_{k+1}-x_k\)\(s,a_{k+1}\) 已知,\(c_k,d_k\) 未知,扩展欧几里得。这样就求出了 \(x_{k+1}=x_k+c_k\times s\)

BSGS

求解 \(a^x\equiv b\pmod{p}\),其中 \(p\) 为质数。
\(T=\lfloor\sqrt{p}\rfloor,x=uT-v(0\le u,v \le T)\)。则有 \(a^{uT}\equiv a^vb\pmod p\)。预处理所有左边的可能值,放进哈希表中,再预处理右边所有的可能值,在哈希表中查询。时间复杂度 \(O(\sqrt{n})\)

$$\huge\textbf{0x02}\ \large\textbf{卷积与反演}$$

以下有函数

\[\Large\epsilon (x)=\begin{cases}1&(x=1)\\0&\text{otherwise.}\end{cases},I(x)=1,id(x)=x. \]

整除分块

\(\sum_{i=1}^n\lfloor \dfrac{n}{i}\rfloor\)。$ 1\le n\le\bf1\times 10^{14}$。
观察到可能有很长一段区间的 \(\lfloor \dfrac{n}{i}\rfloor\) 都是相同的。而且,相同的 \(\lfloor \dfrac{n}{i}\rfloor\) 必定在一个连续的区间内。这启发我们可以枚举 \(\lfloor \dfrac{n}{i}\rfloor\) 的所有可能的取值,计算出所有数都等于该值的最长的区间,再将该区间一起计入答案,来减小复杂度。一个区间的左端点肯定是上一个区间的右端点的位置 \(+1\),现在我们要根据左端点求出相应的右端点。
假设我们确定了左端点,左端点的位置为 \(l\),我们要求的右端点的位置为 \(r\)。设 \(\lfloor\dfrac{n}{l}\rfloor=\lfloor\dfrac{n}{r}\rfloor=k\)\(n=kl+p=kr+p'(0\le p<l,0\le p')\)。我们想要的是最长区间,也就是说,我们想要 \(r\) 最大。所以,当 \(p'\ge k\) 的时候是一定不优的。在 \(0\le p'<k\) 的情况下有 \(p'=n \mod k\)。由此可得 \(r=\lfloor\dfrac{n}{k}\rfloor\)。代入 \(k=\lfloor\dfrac{n}{l}\rfloor\)\(r=\lfloor\dfrac{n}{\lfloor\dfrac{n}{l}\rfloor}\rfloor\)。当 \(i\)\(1\sim \sqrt{n}\) 时,\(\lfloor \dfrac{n}{i}\rfloor\) 最多有 \(\sqrt{n}\) 种取值。当 \(i\)\(\sqrt{n}\sim n\) 时,\(\lfloor \dfrac{n}{i}\rfloor\) 的范围为 \(\sqrt{n}\sim 1\),最多有 \(\sqrt{n}\) 种取值。所以整除分块的复杂度是 \(\sqrt{n}\) 的。
整除分块可以计算下面的式子,其中 \(f(i)\) 易求出前缀和。

\[\Large\sum_{i=1}^nf(i)\lfloor \dfrac{n}{i}\rfloor \]

因为每一块中的 \(\lfloor \dfrac{n}{i} \rfloor\) 都是相同的,我们只需要在分块时乘上每一块的 \(f_i\) 的和即可。

积性函数

如果 \(\forall a ⊥b,f(a\times b)=f(a)\times f(b)\),则函数 \(f(x)\) 为积性函数。值得一提的是,所有积性函数都可以用线性筛法求出。

Dirchlet 卷积

如果 \(f(x)\)\(g(x)\) 是两个数论函数的话,它们的 Dirchlet 卷积 \(h(x)\) 也是一个数论函数,满足 \(h(x)=\sum_{d|x}f(d)g(\dfrac{x}{d})\),记作 \(h=f*g\)

莫比乌斯函数

莫比乌斯函数 \(\mu (x)\) 的定义通俗来说就是:

  • 如果 \(x=1\),则 \(\mu (x)=1\)
  • 如果 \(x\) 能被分解成若干个互不相同的素数 \(a_{1..n}\) 的乘积时,\(\mu (x)=(-1)^n\)。即 \(n\) 为奇数时,\(\mu (x)=-1\)\(n\) 为偶数时,\(\mu (x)=1\)
  • 否则的话,\(\mu (x)=0\)

举个例子。\(6\) 能被分解成 \(2\times 3\),所以 \(\mu (6)=1\)\(70\) 能被分解成 \(2\times 5\times 7\),所以 \(\mu (70)=-1\)
但是 \(12 = 2\times 2\times 3\) 不能被分解成若干个互不相同的素数的乘积,所以 \(\mu (12)=0\)
换句话说,如果存在质数 \(d\),使 \(d^2|x\),那么 \(\mu (x)=0\)

莫比乌斯反演

如果有两个定义在正整数上的函数 \(f(x)\)\(g(x)\),且满足 \(f(x)=\sum_{d|x}g(d)\),则有

\[\Large g(x)=\sum_{d|x}\mu (d)f(\dfrac{x}{d})=\sum_{d|x}\mu (\dfrac{x}{d})f(d) \]

\(g=\mu*f\)。这被称为莫比乌斯反演。证明在这里

莫比乌斯函数的性质

莫比乌斯函数有以下良好的性质:
性质一:

\[\Large\sum_{d|x}\mu (d)=[x=1] \]

证明:
对于 \(x=1\)\(\sum_{d|x}\mu (d) = \mu (1) = 1\)。否则的话,对于唯一分解为 \(x=a_1^{b_1}\times a_2^{b_2}\cdots a_n^{b_n}\) 的数 \(x\) 的因子 \(d\),若存在一个质因子的系数大于 \(1\),则根据莫比乌斯函数的定义,有 \(\mu (d)=0\)。否则的话,每个质因子的系数只有 \(0\)\(1\) 两种取值。设有 \(r\) 个系数取值为 \(1\),则有 \(\mu (d) = (-1)^r\)。因为满足有 \(r\) 个系数取值为 \(1\)\(d\) 的所有可能取值共有 \(\dbinom{n}{r}\) 个,所以所要求的值为

\[\Large\sum_{r=1}^{n}\dbinom{n}{r}\times (-1)^r=\sum_{r=0}^{n}\dbinom{n}{r}\times (-1)^r\times 1^{n-r} \]

右面的式子可以使用二项式定理化成 \((-1+1)^n\),即为 \(0\)。得证。
这个性质经常用于将判断转为求和,从而降低复杂度。性质二:对于任意正整数 \(n\),有

\[\Large\sum_{d|n}\dfrac{\mu (d)}{d}=\dfrac{\varphi (n)}{n}. \]

证明:
有一个引理:\(\sum_{d|n}\varphi (d)=n.\)
证明:\(\forall d|n\),令 \(\gcd(a,n)=d(1\le a\le n)\)。则有 \(\gcd(\dfrac{a}{d}, \dfrac{n}{d})=1\)。对于每一个 \(d\)\(\dfrac{n}{d}\) 为定值。由欧拉函数的定义,符合要求的 \(\dfrac{a}{d}\) 的取值有 \(\varphi (\dfrac{n}{d})\) 种。对于所有 \(d\),符合要求的 \(a\) 的取值有 \(\sum_{d|n}\varphi (\dfrac{n}{d})\) 种。所有可能的 \(a\) 的取值只有 \(n\) 种。于是有 \(n=\sum_{d|n}\varphi (\dfrac{n}{d})=\sum_{d|n}\varphi (d)\)。得证。
根据引理,\(id(n)=\sum_{d|n}\varphi(d)\)。则根据莫比乌斯反演,\(\varphi(n)=\sum_{d|n}\mu(d)id(\dfrac{n}{d})\),两边同除 \(n\) 即得证。

二项式反演

\[\Large f(x)=\sum_{i=0}^x(-1)^i\dbinom{x}{i}g(i)\leftrightarrow g(x)=\sum_{i=0}^x(-1)^i\dbinom{x}{i}f(i) \]

\[\Large f(x)=\sum_{i=0}^x\dbinom{x}{i}g(i)\leftrightarrow g(x)=\sum_{i=0}^x(-1)^{n-i}\dbinom{x}{i}f(i) \]

常用“钦定法”求解问题。即求恰好某些位置满足要求时,可以钦定一些位置满足要求,其他随意,再利用二项式反演进行容斥。

Min-Max 容斥

\[\Large \max_{i\in S}i=\sum_{T\subseteq S}(-1)^{|T|+1}\min_{i \in T}i \]

可以实现 \(\max\)\(\min\) 之间的互相转化。

posted @ 2023-07-22 16:08  ReTF  阅读(62)  评论(0编辑  收藏  举报