浅谈初等数论
Stellar_River · · 算法·理论
组合数学
排列组合
【定义】
从
从
P8692 [蓝桥杯 2019 国 C] 数正方形(加强版)
:::info[题目描述]{open}
增强版与原题不一样的是,题目中是
:::
二项式定理
【定理】
设
特别地,当
【扩展】卡特兰数
对于
【例题】P1641 [SCOI2010] 生成字符串
:::info[题目描述]{open}
你需要生成一个正好包含
不难计算出(设最终答案位
:::
容斥原理
【定理】
假设
【例题】P1450 [HAOI2008] 硬币购物
:::info[题目描述]{open}
共有
| 某人去商店买东西,去了 |
|---|
| :::success[如何求解]{open} |
| 可以先考虑硬币没有数量限制的情况,使用完全背包,对于询问价值 |
再考虑只有一种硬币有限制(例如硬币
类似的,如果只有硬币
| 最后总共 |
|---|
| ### 数论分块 |
| #### 【定义】 |
| 数论分块可以快速计算一些形如 |
| 的的和式。如果可以在 |
| #### 【例题】整数分块 |
| :::info[题目描述]{open} |
| 对于( |
| ::: |
| :::success[如何求解]{open} |
| 我们可以计算下面这个式子。 |
| $$ |
| \begin{aligned} |
| q&=\Big\lfloor\frac n L\Big\rfloor\ |
| \text{ans}&=\sum_{L=1}^{n}\Big[q\times\Big(\Big\lfloor\frac n q\Big\rfloor-L+1\Big)\Big] |
| \end{aligned} |
| $$ |
| 然后下面是模拟计算的伪代码。 |
| ```cpp line-numbers |
| typedef long long LL; |
LL floor_sum(LL n){ LL ans=0; for(LL L=1,R;L<=n;L=R+1){ LL q=n/L; R=n/q; ans+=q*(R-L+1); } return ans; }
:::
#### 【例题】P2261 [CQOI2007] 余数求和
:::info[题目描述]{open}
给出正整数 $n$ 和 $k$,请计算
$$G(n, k) = \sum_{i = 1}^n k \bmod i$$
其中 $k\bmod i$ 表示 $k$ 除以 $i$ 的余数。
:::
:::success[如何求解]{open}
通过计算下面这个式子可以得到答案。
$$\begin{aligned}\sum_{i = 1}^n k \bmod i&=\sum_{i=1}^nk-i\Big\lfloor\frac k i\Big\rfloor\\&=nk-\sum_{i=1}^ni\Big\lfloor\frac k i\Big\rfloor\end{aligned}$$
本题目是一道 **【模板题】**,话不多说,直接开写。(代码由 @[Furina_oier](https://www.luogu.com.cn/user/1399773) 提供)
```cpp line-numbers
#include<bits/stdc++.h>
using namespace std;
// 省略快读快写
signed main(){
int n=read(),k=read();
int ans=n*k;
for(int i=1,j;i<=n;i=j+1){
if(k/i!=0)
j=min(k/(k/i),n);
else j=n;
ans-=(k/i)*(j-i+1)*(l+r)/2;
}
write(ans,0);
return 0;
}
:::
矩阵乘法
【定义】
首先我们需要了解什么是矩阵。对于
那么,对于下面两个矩阵
其乘积为
简单地,有公式
而且,矩阵乘法满足结合律(不一定满足交换律)。
【扩展】矩阵加法
矩阵加法比矩阵乘法简单,只需要按位相加即可。
【例题】台阶问题(加强版)
:::info[题目描述]{open}
有
| 本题目为加强版,原题数据范围 |
|---|
| :::success[如何解决]{open} |
| 下面有多种做法,区别就在于时间复杂度。 |
- 【
\mathcal O(NK) 做法】\begin{aligned} f(0)&=1\\ f(x)&=\sum_{i=1}^{\min(x,K)}f(x-i) \end{aligned} - 【
\mathcal O(K^3\log N) 做法】 使用矩阵乘法。 - 【
\mathcal O(N) 做法】\begin{aligned} f(0)&=1\\ f(1)&=1\\ f(x)&=\begin{cases} 2\times f(x-1)\quad&\text{if\ \,}2\leq x\leq K\\ 2\times f(x-1)-f(x-K-1)\quad&\text{if\ \,}K<x\leq N \end{cases} \end{aligned} :::
素数与互素
整除
【定义】
设
a,b\in\mathbb Z 且a\neq 0 ,如果存在整数q ,使得b=a\cdot q 则称
a 整除b ,或者b 可被a 整除,记作a\mid b ,此时称a 是b 的因数(或约数),b 是a 的倍数;反之,如果不存在这样的整数q ,则称a 不整除b ,或者b 不可被a 整除,记作a\nmid b 。
OI 中,无特殊说明,约数
【基本性质】
设
- 自反性:
a\mid a ; - 传递性:若
a\mid b,b\mid c ,则a\mid c ; - 线性性:若
a\mid b,a\mid c ,则对于\forall x,y ,有a\mid(bx+cy) ; - 与符号无关:若
a\mid b ,则-a\mid b,a\mid -b ; - 比较性:若
a\mid b 且b\neq0 ,则|a|\leq|b| ; - 遍历对称:若
b>0 ,则当a 遍历b 的全体正因数时,\frac b a 亦然。取整函数
【定义】
对于
x\in\mathbb R ,对于向下取整函数和向上取整函数分别如下。\lfloor x\rfloor&=\max\{n\in\mathbb Z\mid n\leq x\}\\\lceil x\rceil&=\min\{n\in\mathbb Z\mid n\geq x\}\end{aligned} 取整函数通常指向下取整函数。
此外,还有四舍五入函数,但是数论中并不常用(值得注意的是,当
【基本性质】
设
- 基本不等式:
\lfloor x \rfloor \le x < \lfloor x \rfloor + 1,\lceil x \rceil - 1 < x \le \lceil x \rceil ; - 整数提出:
\lfloor x + n \rfloor = \lfloor x \rfloor + n \lceil x + n \rceil = \lceil x\rceil +n ; - 反号关系:
\lfloor -x \rfloor = -\lceil x \rceil,\lceil -x \rceil = -\lfloor x \rfloor ; - 合并公式:
\lfloor x \rfloor + \lfloor y \rfloor \le \lfloor x + y \rfloor \le \lfloor x \rfloor + \lfloor y \rfloor + 1 ; - 等价关系
1 :n \le x \iff n \le \lfloor x \rfloor,n \ge x \iff n \ge \lceil x \rceil ; - 等价关系
2 :n < x \iff n < \lfloor x \rfloor,n > x \iff n > \lceil x \rceil 。带余除法
【定义】
设
a,b\in\mathbb Z,a\neq0 ,则存在唯一的整数q (商)和r (余数),使得b=a\cdot q+r\quad(0\leq r<|a|) 样的式子称为
b 除以a 的带余除法算式,q 称为不完全商(简称商),r 称为余数。【基本性质】
设
a,b\in\mathbb Z,a\neq0 ,q 是b 除以a 的商。 - 整除判定:
a\mid b 当且仅当余数为0 ; - 余数遍历:相邻的
|a| 个整数除以a ,余数恰好遍历[0, a − 1] ; - 商的估计:若除数
a>0 ,则商q=\lfloor\frac b a\rfloor ;若a<0 ,则商q=\lceil\frac b a\rceil 。【扩展】负数的带余除法
::cute-table{tuack} | 被除数
b | 除数a | 算式 | 商q | 余数r | |:-:|:-:|:-:|:-:|:-:| |7 |3 |7\div3 |2 |1 | | ^ |-3 |7\div(-3) |-2 | ^ | |-7 |3 |-7\div3 | ^ |-1 | | ^ |-3 |-7\div(-3) |2 | ^ | :::align{center} 表 2-1:编程语言中,负数的带余除法 :::最大公约数与最小公倍数
【定义】最大公约数
设
a_1,a_2,\cdots,a_n 是n 个不全为零的整数,如果正整数d 满足以下条件。 -
- 对于
\forall c 满足c\mid a_1,c\mid a_2,\cdots,c\mid a_n ,有c\mid d 。
则称
也可以写作下面这个式子。
【定义】最小公倍数
设
-
- 对于
\forall c 满足a_1\mid c,a_2\mid c,\cdots,a_n\mid c 的整数c ,有m\mid c 。
则称
也可以写作下面这个式子。
【基本性质】
- 交换律:
(a,b)=(b,a),[a,b]=[b,a] ; - 结合律:
(a,b,c)=((a,b),c)=(a,(b,c)),a,b,c]=[[a,b],c]=[a,[b,c]] ; - 单位元:
(a,0)=|a|,[a,1]=|a| ; - 与符号无关:
(a, b) = (|a|, |b|),[a, b] = [|a|, |b|] ; - 乘法提出:
(ka,kb)=|k|(a,b),[ka,kb] ; - 幂提出:
(a^k,b^k)=(a,b)^k,[a^k,b^k]=[a,b]^k ; - 乘积关系:
(a,b)\times[a,b]=|a\times b| ; \bm\gcd 更相减损:(a, b) = (a \pm b, b) = (a, b \pm a) ;\bm\gcd 辗转相除:(a,b)=(a\bmod b,b)=(a,b\bmod a) 。互素
【定义】
设
a,b\in\mathbb Z ,若\gcd(a,b)=1 ,则称a 与b 互素(或互质),记作下面这个式子。a\perp b 若
\gcd(a,b\neq1 ,则称a 与b 不互素(或不互质),记作下面这个式子。a\not\perp b 特别地,若
\gcd(a_1,a_2,\cdots,a_n)=1 ,则称a_1,a_2,\cdots,a_n 整体互素。若\forall a_i,a_j (保证i\neq j )满足\gcd(a_i,a_j)=1 ,则称它们两两互素。【基本性质】
设
a,b,c,d\in\mathbb Z 。- 对称性:若
a\perp b ,则b\perp a ; - 遍历性:若
a\perp b ,则相邻的|a| 个整数乘b 再除以a ,余数恰好遍历[0,a-1] ; - 与符号无关:若
a\perp b ,则-a\perp b 且a\perp -b ; - 乘法的保持:若
a\perp b 且a\perp c ,则a\perp bc ; - 倍数的约化:若
a\perp b ,c\mid a 且d\mid b ,则c\perp d ; - 与整除的关系:若
a\perp b 且a\mid bc ,则a\mid c 。【例题】P3951[NOIP2017 提高组] 小凯的疑惑(加强版)
:::info[题目描述]{open} 增强版与原题不同,区别在于下面。
- 多了一问:有多少种价格无法支付。
-
数据范围扩大到 2\leq p,q\leq 10^9 。::::success[如何解决]{open} ::cute-table{tuack} 模 p :-: 余 0 余 1 余 2 余 3 余 4 :::align{center} 表 2-2:可支付金额表(灰色为不可支付) ::: 由于 p\perp q ,故\{0q,1q,2q,\cdots,(p-1)q\} 在模p 意义下遍历[0,p-1] ,那么不难做出时间复杂度至少为\mathcal O(\min(p,q)) 的方法。
接下来考虑,每个红色数字意味着这一行它左边的金额都无法支付,右边都能支付;换句话说每个红色数字
最大价格找出来了,接下来求下面这个式子的值。
那我们来求一下。
容易知道
n=\sum_{i=1}^{+\infty}\llbracket i\leq n\rrbracket ,还有当a,b,c\in\mathbb Z^+ 时,\llbracket a\leq \big\lfloor\frac bc\big\rfloor\rrbracket=\llbracket a\leq \frac bc\rrbracket=\llbracket ac\leq b\rrbracket 。
下面我们推算。
因为
| 综上, |
|---|
| ### 素数 |
| #### 【定义】 |
| 设 |
| 特别地, |
| #### 【基本性质】 |
| - 整除性:若 |
| - 整除性推广:若 |
| - 素性判定:若对所有满足 |
| - 素数的个数:素数个数是无限的(欧几里得证明); |
| - 标准分解式:任意大于 |
| $$ |
| n = p_1^{\alpha_1} p_2^{\alpha_2} \dots p_k^{\alpha_k} |
| $$ |
| 其中 |
| ## 同余方程与中国剩余定理 |
| ### 同余 |
| #### 【定义】 |
| 设 |
| 此时 |
| #### 【基本性质】 |
| 设 |
| - 自反性: |
| - 对称性:若 |
| - 传递性:若 |
| - 保加性:若 |
| - 保乘性:若 |
| - 幂等性:若 |
| - 消去律:若 |
| - 与带余除法的关系: |
| ### 裴蜀定理 |
| #### 【定理】 |
| 设 |
| 特别地, |
| #### 【扩展】扩展欧几里得算法 |
| :::info[题目描述]{open} |
| 输入两个不同时为 |
输出
::: :::success[解法和证明]{open}
auto ExEuclid(auto a,auto b){
if(b==0)return abs(a),sign(a),0;
auto x1,y1;
x1=y1=g=ExEuclid(b,a%b);
x=y1;
y=x1-(a div b)*y1;
return g,x,y;
}
上述是计算扩展欧几里得的算法伪代码(直接使用会导致编译错误)。
那我们如何证明?我们可以证明 a div b 并不等价于数学公式中的
:::
二元一次不定方程 & 同余方程
【定义】二元一次不定方程
故存在整数
发现它是同余方程组的一个特解,即满足所有的
【证明】解唯一
假设
即
考虑
因此同余方程的所有解模
\text{Lucas} 定理
【定理】
设
其中
特别地,当
【例题】P2480[SDOI2010] 古代猪文
:::info[题目描述]{open}
-
给定
g, n ,求g^{\sum_{d|n} \binom{n}{d}} \mod p -
其中
p = 999911659 ,是素数。 -
本题需要使用费马小定理,这里提前给出:当
g 是正整数p 是素数时,有g^{p-1} \equiv 1 \pmod{p} -
1 \leq g, n \leq 10^9 ::: :::success[如何求解]{open}
-
本题等价于求
\sum_{d|n} \binom{n}{d} \mod (p-1) ,后接快速幂即可; -
-
计算
\sum_{d|n} \binom{n}{d} 模以上四个素数的余数,再用中国剩余定理合并; -
以最大的
35617 为例,怎么求\sum_{d|n} \binom{n}{d} \mod 35617 ; -
-
对于每个因子 d ,套\text{Lucas} 定理求\binom{n}{d} \mod 35617 。## 线性筛与欧拉定理 ### 线性筛 #### 【证明】 设合数 c = p \times m ,其中p 是c 的最小质因子。 -
完全性(每个合数至少标记一次)
当外层循环到i = m 时:
由于m 的质因子都不比p 小
内层循环至少遍历到p_j = p
进而标记c 是合数 -
线性性(每个合数至多标记一次)
对于c 的任何其它质因子p' :
令c = p' \times m'
显然p 也是m' 的质因子,且p < p'
故当外层循环到i = m' 时
内层循环总会在到达p' 前中断
综上合数c = p \times m 由且只由p 标记 :::success[伪代码]{open}auto LinearSieve(auto n){ memset(primes,false,sizeof primes); memset(is_primes,false,sizeof is_primes); int tot=0; for(auto i=2;i<=n;i++){ if(is_prime[i])primes[++tot]=i; for(auto j=0;j<tot;j++){ if(primes[j]&i>n)break; is_prime[primes[j]*i]=false; if(i%primes[j]==0)break; } } return primes[]; }:::
欧拉函数
【定义】
设
n \in \mathbb{Z}^+ ,欧拉函数\varphi(n) 定义为不超过n 且与n 互素的正整数的个数,即\varphi(n) = \#\Set{1 \leq k \leq n | \gcd(k, n) = 1}
特别地,规定
【基本性质】
设
- 积性函数:若
\gcd(m, n) = 1 ,则\varphi(mn) = \varphi(m)\varphi(n) ,可用中国剩余定理证明; - 素数幂的情形:
\varphi(p^k) = p^k - p^{k-1} = p^k \left(1 - \frac{1}{p}\right) - 一般公式:
若n = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k} ,则\varphi(n) = \prod_{i=1}^k p_i^{\alpha_i} \left(1 - \frac{1}{p_i}\right) = n \prod_{i=1}^k \left(1 - \frac{1}{p_i}\right) - 高斯定理:
\sum_{d|n} \varphi(d) = n 证明:枚举因子
d ,恰好有\varphi(d) 个不超过n 的正整数k 满足\gcd(k, n) = \frac{n}{d} 【例题】GCD
:::info[题目描述]{open}
- 令
P 表示所有素数构成的集合 -
给定正整数 n ,求有多少对1 \leq x, y \leq n 满足:::success[如何求解]{open} 设最终答案为 \text{ans} 则$$ \begin{aligned} \text{ans} &= \sum{p \in P,q\leq n} \sum{i=1}^{n} \sum_{j=1}^{n} \llbracket \gcd(i, j) = p \rrbracket \ &= \sum{p \in P,q\leq n} \sum{i=1}^{\lfloor n/p \rfloor} \sum_{j=1}^{\lfloor n/p \rfloor} \llbracket \gcd(i, j) = 1 \rrbracket \ &= \sum{p \in P,q\leq n} \left( 2 \left( \sum{i=1}^{\lfloor n/p \rfloor} \sum_{j=1}^{i} \llbracket \gcd(i, j) = 1 \rrbracket \right) - 1 \right) \ &= \sum{p \in P,q\leq n} \left( 2 \left( \sum{i=1}^{\lfloor n/p \rfloor} \varphi(i) \right) - 1 \right) \end{aligned} $$ ::: ### 同余类 #### 【定义】 设 m \in \mathbb{Z}^+ ,对于任意整数a ,定义集合
称为
【基本性质】
设
- 等价关系:同余关系
\equiv \pmod{m} 是整数集\mathbb{Z} 上的等价关系,同余类就是等价类 - 划分性质:不同的同余类互不相交,且全体同余类的并集为
\mathbb{Z} - 代表元的选取:每个同余类有无数个代表元,通常选取
0, 1, \ldots, m-1 作为标准代表元 - 运算的良定性:在
\mathbb{Z}_m 上可定义加法和乘法:\bar{a} + \bar{b} = \overline{a+b}, \quad \bar{a} \cdot \bar{b} = \overline{ab} 这些运算与代表元的选取无关(良定义)
- 可逆元:在
\mathbb{Z}_m 中,\bar{a} 可逆当且仅当\gcd(a, m) = 1 ,可逆元的个数为\varphi(m) 剩余系
【定义】
设
m \in \mathbb{Z}^+ ,若一个大小为m 的整数集合\{a_1, a_2, \dots, a_m\} 其元素模m 两两不同余,则称之为模m 的一个完全剩余系,通常取\{0, 1, \dots, m-1\} 作为标准完全剩余系。
若一组整数
- 对每个
b_i ,有\gcd(b_i, m) = 1 - 当
i \neq j 时,b_i \not\equiv b_j \pmod{m}
则称
【基本性质】
设
-
平移不变(完全):若
\{a_1, a_2, \dots, a_m\} 是模m 的完全剩余系,则对任意整数c ,\{a_1 + c, a_2 + c, \dots, a_m + c\} 也是
-
数乘不变(完全):若
\{a_1, a_2, \dots, a_m\} 是模m 的完全剩余系且\gcd(k, m) = 1 ,
则\{ka_1, ka_2, \dots, ka_m\} 也是 -
数乘不变(简化):若
\{b_1, b_2, \dots, b_{\varphi(m)}\} 是模m 的简化剩余系且\gcd(k, m) = 1, \quad \text{则 } \{kb_1, kb_2, \dots, kb_{\varphi(m)}\} 也是
-
威尔逊定理:若
p 为素数,则1, 2, \dots, p-1 构成模p 的简化剩余系,且有(p-1)! \equiv -1 \pmod{p} 欧拉定理
【定义】欧拉定理
若
a, n \in \mathbb{Z}^+ 且\gcd(a, n) = 1 ,则a^{\varphi(n)} \equiv 1 \pmod{n} 【定义】费马小定理
若
a, p \in \mathbb{Z}^+ 且p 是素数,则a^{p-1} \equiv 1 \pmod{p} 【推论】费马小定理
若
a, p \in \mathbb{Z}^+ 且p 是素数,则a^{-1} \equiv a^{p-2} \pmod{p}
因此,可以使用快速幂求模素数下的逆元。
【证明】欧拉定理
设与
由于
在模
因此,这两个集合在模
即
每个
【定理】扩展欧拉定理
设
-
若
\gcd(a, m) = 1 ,则a^b \equiv a^{b \bmod \varphi(m)} \pmod{m} -
若
\gcd(a, m) \neq 1 且b < \varphi(m) ,则直接计算a^b \pmod{m} -
若
\gcd(a, m) \neq 1 且b \geq \varphi(m) ,则a^b \equiv a^{(b \bmod \varphi(m)) + \varphi(m)} \pmod{m}