数论(自学)

零、说在前面

0.1 感谢

感谢百度百科、oi-wiki、洛谷的题目。

0.2 阅读前须知

作者很菜,不要看。如果有错误,私信即可,一周内回。

一、抽屉原理

1.1 第一抽屉原理

原理1: 把 n+kn+k 个物体放到 nn 个抽屉里,则至少有一个抽屉里的东西不少于两件。
证明(反证法):如果每个抽屉至多只能放进一个物体,那么物体的总数至多是 n×1n×1,而不是题设的 n+k(k1)n+k(k≥1),故不可能。
原理2:把多于 mn+1(n0)mn+1(n\ne 0) 个的物体放到 nn 个抽屉里,则至少有一个抽屉里有不少于 (m+1)(m+1)的物体。
证明(反证法):若每个抽屉至多放进 mm 个物体,那么 nn 个抽屉至多放进 mnmn 个物体,与题设不符,故不可能。
原理3:把无数多件物体放入 nn 个抽屉,则至少有一个抽屉里有无数个物体。
原理1 、2 、3都是第一抽屉原理的表述。

1.2 第二抽屉原理

(mn1)(mn-1)个物体放入 nn 个抽屉中,其中必有一个抽屉中至多(m1)(m-1) 个物体。

例题:天选之人(?)取模

二、集合

2.1 定义

把一些单独的物体(数、坐标、函数、集合)合起来看成一个整体,就形成一个集合(或集)

2.2 集合的特点

确定性、互异性、无序性

2.3 集合的表示

大写字母,如集合 A,B,XA,B,X

2.4 属于与不属于

aa 属于集合 AA,记做 aAa\in A
aa 不属于集合 AA,记做 a∉Aa\not \in A

2.5 集合的表示

  • 列举法
    列举法就是将集合的元素逐一列举出来的方式。如 {1,14,51,4},{,{1,14,51,4},{(1,1),(2,2)},1.14}\{1,14,51,4\},\{\varnothing,\{1,14,51,4\},\{(1,1),(2,2)\},1.14\}
  • 描述法
    描述法的形式为{代表元素|满足的性质}。如所有满足大于 114114 数的集合表示为 {xx>114}\{x|x>114\}
  • 图像法
    又称韦恩图法、韦氏图法,是一种利用二维平面上的点集表示集合的方法。如图:
  • 区间法
    用数轴、无穷大、无穷小、开区间、闭区间 、半开半闭区间表示。
    无穷大:++\infty;无穷小:-\infty
    开区间:(a,b)(a,b)。闭区间:[a,b][a,b]。左闭右开:[a,b)[a,b),右闭左开:(a,b](a,b]
    开的那一边不包括数。如 (114,514)(114,514) 不包括 114,514114,514
  • 符号法
    NN:非负整数集合或自然数集合 {0,1,2,3,}\{0,1,2,3,…\}
    NN^*N+N^+:正整数集合 {1,2,3,}\{1,2,3,…\}
    ZZ:整数集合 {,1,0,1,}\{…,-1,0,1,…\}
    QQ:有理数集合
    Q+Q+:正有理数集合
    QQ-:负有理数集合
    RR:实数集合(包括有理数和无理数)
    R+R+:正实数集合
    RR-:负实数集合
    CC:复数集合
    \varnothing :空集(不含有任何元素的集合)

2.6 集合基本关系

  • 子集与真子集
    • 子集
      S,TS,T 是两个集合,如果 SS 的所有元素都属于 TT ,则称 SSTT 的子集,记为 STS\subseteq T (读作S包含于T)
      一些显然性质:SS,SS\subseteq S,\varnothing \subseteq S
    • 真子集
      STS\subseteq TTT 有一个元素 xx 满足 x∉Sx\not \in S,则称 SSTT 的真子集。
  • 交集与并集
    交集定义:由属于A且属于B的相同元素组成的集合,记作ABA\bigcap B(或 BAB\bigcap A ),读作“A交B”(或“B交A”),即AB={xxA,xB}A\bigcap B=\{x|x∈A,\texttt且x∈B\}

    并集定义:由所有属于集合A或属于集合B的元素所组成的集合,记作 ABA\bigcup B(或 BAB\bigcup A),读作“A并B”(或“B并A”),即 AB={xxA,xB}A\bigcup B=\{x|x∈A,\texttt或x∈B\}
  • 相等集合
    如果集合A是集合B的子集(ABA\subseteq B),且集合B是集合A的子集(BAB\subseteq A),则集合A与集合B相等。
  • 补集
    • 相对补集
      由属于 AA 而不属于 BB 的元素组成的集合,称为B关于A的相对补集,记作 AB\complement_{A}B ,即 AB={xxA,xB}\complement_{A}B=\{x|x∈A,\texttt且x∉B\}
    • 绝对补集
      AA 关于全集合 UU 的相对补集称作 AA 的绝对补集,记作 UA\complement_{U}A
  • 幂集
    设有集合 AA,由集合 AA 所有子集组成的集合,称为集合 AA 的幂集。
    对于幂集有定理如下:有限集 AA 的幂集的基数等于 22 的有限集 AA 的基数次幂。即若 AA 的元素数量为 xx,则幂集的元素数量为 2x2^x

三、一一对应

前置知识:映射

  • 定义:两个非空集合 AABB 间存在着对应关系 ff,而且对于 AA 中的每一个元素 aaBB 中总有唯一的一个元素 bb 与它对应,就这种对应为从 AABB 的映射,记作 f:ABf:A→B。其中,bb 称为元素 aa 在映射 ff 下的像,记作:b=f(a)b=f(a)aa 称为 bb 关于映射 ff 的原像。集合A中所有元素的像的集合称为映射 ff 的值域,记作 f(A)f(A)

一一对应:对于任意的 f:ABf:A\to B,有 BB 的任何元素都不能与 AA 的多个元素配对。

四、错排公式

错排问题(伯努利-欧拉的装错信封的问题):有 nn 封信,nn 个邮箱,第 ii 封信对应第 ii 个邮箱。问所有信都投错的方案数是多少?

递推公式:Tn=(n1)(Tn1+Tn2)T_n=(n-1)(T_{n-1}+T_{n-2})

推导:

  1. 将元素 nn 放到第 k(kn)k(k\ne n) 个位置,有 n1n-1 种办法。
  2. 若此时将元素 kk 放到第 nn 个位置,有 (n1)Tn2(n-1)T_{n-2} 种方案数;若此时将元素 kk 不放到第 nn 个位置(此时 kk 相当于 nn),有 (n1)Tn1(n-1)T_{n-1} 种方案数。
  3. 综上,Tn=(n1)(Tn1+Tn2)T_n=(n-1)(T_{n-1}+T_{n-2})

错排问题的通项公式见5.5。

五、容斥原理

5.1 引入

七(7)班中,有 nn 人玩原神,mm 人玩MC,k(knkm)k(k\le n \texttt且 k\le m) 人两款游戏都玩,全班至少玩这两款游戏之一,问全班多少人?
显然有 n+mkn+m-k 人。

5.2.1 经典容斥原理 - 1

经典例题:有集合 A,BA,B,求其并集大小。
很容易想到 AB=A+BAB|A\bigcup B|=|A|+|B|-|A\bigcap B|。原理如下:

  1. 答案加上 A+B|A|+|B|,有:
  2. 显然多了 AB|A\bigcap B|,减去即可。

5.2.2 经典容斥原理 - 2

经典例题:有集合 A,B,CA,B,C,求其并集大小。
同“五-2”,答案为 ABC=A+B+CABACBC+ABC|A\bigcup B\bigcup C|=|A|+|B|+|C|-|A\bigcap B|-|A\bigcap C|-|B\bigcap C|+|A\bigcap B\bigcap C|

5.3 容斥原理通项

例题:有集合 A1AnA_1\sim A_n,求其并集大小。

A1A2An=1inAi1ijnAiAj+1ijknAiAjAk+(1)nA1A2An=k=1n(1)k+11i1i2ikAi1Ai2Ain\begin{aligned}\left|A_1\bigcup A_2 \bigcup\cdots\bigcup A_n\right|&=\sum\limits_{1\le i\le n} \left|A_i\right|-\sum\limits_{1\le i\le j\le n} \left|A_i\bigcap A_j\right|+\sum\limits_{1\le i\le j\le k\le n} \left|A_i\bigcap A_j\bigcap A_k\right|-\cdots+(-1)^n \left|A_1\bigcap A_2\bigcap \cdots\bigcap A_n\right|\\&=\sum\limits^{n}_{k=1}(-1)^{k+1}\sum\limits_{1\le i_1\le i_2\le \cdots\le i_k}\left|A_{i_1}\bigcap A_{i_2}\bigcap\cdots\bigcap A_{i_n}\right|\end{aligned}

练习:出生点

5.4 二维前缀和

二维前缀和的本质是容斥原理

si,j=si,j1+si1,jsi1,j1+ai,js_{i,j}=s_{i,j-1}+s_{i-1,j}-s_{i-1,j-1}+a_{i,j} i=xbxej=ybyeai,j=sxe,ye+sxb1,yb1sxb1,yesxe,yb1\sum_{i = xb}^{xe} \sum_{j = yb}^{ye}a_{i,j}=s_{xe,ye}+s_{xb-1,yb-1}-s_{xb-1,ye}-s_{xe,yb-1}

5.5 错排问题通项

正整数 1,2,3,,n1,2,3,\cdots,n 的全排列有 n!n! 种,其中第 kk 位是 kk 的排列有 (n1)!(n-1)! 种,由于所求的是错排的种数,所以应当减去这些排列;但是此时把同时有两个点放对位置的排列多排除了一次,应补上;在补上时,把同时有三个数不错排的排列多补上了一次,应排除;……;继续这一过程,得到错排的排列种数为

Tn=n!+n!1!n!2!++(1)nn!n!=i=2n(1)i×n!i!T_n=n!+\dfrac{n!}{1!}-\dfrac{n!}{2!}+\cdots+(-1)^n\dfrac{n!}{n!}=\sum\limits^n_{i=2}\dfrac{(-1)^i\times n!}{i!}

提出一个 n!n!,有 Tn=n!i=2n(1)ii!T_n=n!\sum\limits^n_{i=2}\dfrac{(-1)^i}{i!}

六、康拓展开

七、排列数与组合数

7.1 排列数

  • 定义
    nn 个不同元素中,任取 m(mn)m(m≤n) 个元素按照一定的顺序排成一列,叫做从 nn 个不同元素中取出 mm 个元素的一个排列;
    nn 个不同元素中取出 m(mn)m(m≤n) 个元素的所有排列的个数,叫做从 nn 个不同元素中取出 mm 个元素的排列数,记作 AnmA^m_n
  • 计算
Anm=n×(n1)×(n2)××(nm+1)=n!(nm)!\begin{aligned}A^m_n&=n\times (n-1)\times (n-2)\times \cdots\times (n-m+1)\\&=\dfrac{n!}{(n-m)!}\end{aligned}

7.2 组合数

  • 定义
    nn 个不同元素中,任取 m(mn)m(m≤n) 个元素并成一组,叫做从 nn 个不同元素中取出 mm 个元素的一个组合;
    nn 个不同元素中取出 m(mn)m(m≤n) 个元素的所有组合的个数,叫做从 nn 个不同元素中取出 mm 个元素的组合数,记作 CnmC^m_n
  • 计算
Cnm=AnmAmm=n!(nm)!×m!\begin{aligned}C^m_n&=\dfrac{A^m_n}{A_m^m}\\&=\dfrac{n!}{(n-m)!\times m!}\end{aligned}
  • 注明
    CnmC_n^m 有时写作 (nm)\begin{pmatrix}n\\m\end{pmatrix}

7.3 组合数性质

  • 互补性
Cnm=CnnmC^m_n=C^{n-m}_n
  • 递推公式
    推导过程:假设已知 Cn1kC^{k}_{n-1},那么对于 CnmC^m_n 来说,要么多增加的那一个拿,要么不拿。故:
Cnm=Cn1m+Cn1m1C^m_n=C^m_{n-1}+C^{m-1}_{n-1}
  • 帕斯卡法则
    推导过程:略。
Ckn1+Ck1n1=CknC^{n-1}_{k}+C^{n-1}_{k-1}=C^n_k

7.4 计数方法

  • 加法原理
    一件事有 nn 方法,每种方法有 aia_i 种办法,这件事完成的方案数为 ai\sum a_i
  • 乘法原理
    一件事有 nn 要做,每一步拥有 aia_i 种方法,这件事完成的方案数为 ai\prod a_i

7.5 捆绑法、插空法

  • 捆绑法用来处理相邻问题。在排列计数问题中,把需要相邻的元素“捆绑”在一起,视作一个元素参与排列。注意点:捆绑的元素最后还要“解绑”,把捆在一起的几个元素进行排列。
  • 插空法用来处理不相邻问题。不能相邻的元素通常最后参与排列,通过插空的方式放在已排的元素之间。

7.6 隔板法

  • 隔板法用来将相同的元素分组,并且每组至少有一个元素。

八、二项式定理

8.1 二项式定理

(x+y)n=i=0n(Cni×xi×yni)(x+y)^n=\sum\limits_{i=\color{red}0}^n(C_n^i\times x^i\times y^{n-i})

或表示为

(x+y)n=[x0xn][Cn0Cnn][11][b0 bn](x+y)^n=[x^0\hspace{0.3cm}\cdots\hspace{0.3cm}x^n]\begin{bmatrix} C^0_n & & \\ & \ddots & \\& & C^n_n \end{bmatrix}\begin{bmatrix} & & 1\\ & \cdots & \\1 & & \end{bmatrix}\begin{bmatrix} b^0\\ \vdots \\b^n \end{bmatrix}

8.2 二项式定理的简单推导

(x+y)1=x+y(x+y)^1=x+y (x+y)2=x2+2xy+y2(x+y)^2=x^2+2xy+y^2 (x+y)3=x3+3x2y+3xy2+y2(x+y)^3=x^3+3x^2y+3xy^2+y^2 \cdots (x+y)n=i=0n(Cnixiyni)(x+y)^n=\sum\limits_{i=0}^n(C_n^ix^iy^{n-i})

8.3 二项式定理的严谨推导

  • 组合证法
    a1ana_1\sim a_n 满足:
(x+y)n=(x+y)×(x+y)×(x+y)×(x+y)××(x+y)n(x+y)=a1xn+a2xn1y+a3xn2y2++anyn\begin{aligned}(x+y)^n&=\underbrace{(x+y)\times (x+y)\times (x+y)\times (x+y)\times\cdots \times (x+y)}_{n\texttt{个}(x+y)}\\&=a_1x^n+a_2x^{n-1}y+a_3x^{n-2}y^2+\cdots+a_ny^n\end{aligned}

对于 ii 项,如果要求出 aia_i 那么就在这 nn(x+y)(x+y) 组合\color{red}\texttt{组合}。由于需要选出 iixx 出来,所以 ai=Cnia_i=C_n^i

  • 数学归纳法
    易得 m=1m=1 时,此时成立。
    如果对于 m=nm=n 时,二项式定理成立。
    那么在 m=n+1m=n+1 时,
(x+y)n+1=x(x+y)n+y(x+y)n=xi=0n(Cnixiyni)+yi=0n(Cnixiyni)=i=0n(Cnixi+1yni)+i=0n(Cnixiyni+1)=i=0n(Cnixi+1yni)+i=1n(Cnixiyni+1)+yn+1=i=1n+1(Cni1xiyni+1)+i=1n(Cnixiyni+1)+yn+1=xn+1+yn+1+i=1n(Cni1xiyni+1)+i=1n(Cnixiyni+1)=xn+1+yn+1+i=1n(Cni1+Cni)(xiyni+1)=xn+1+yn+1+i=1n(Cn+1ixiyxi+1)(帕斯卡法则)=i=0m(Cmixiymi)\begin{aligned}(x+y)^{n+1}&=x(x+y)^n+y(x+y)^n\\&=x\sum\limits_{i=0}^n(C_n^ix^iy^{n-i})+y\sum\limits_{i=0}^n(C_n^ix^iy^{n-i})\\&=\sum\limits_{i=0}^n(C_n^ix^{i+1}y^{n-i})+\sum\limits_{i=0}^n(C_n^ix^iy^{n-i+1})\\&=\sum\limits_{i=0}^n(C_n^ix^{i+1}y^{n-i})+\sum\limits_{i=1}^n(C_n^ix^iy^{n-i+1})+y^{n+1}\\&=\sum\limits_{i=1}^{n+1}(C_{n}^{i-1}x^{i}y^{n-i+1})+\sum\limits_{i=1}^n(C_n^ix^iy^{n-i+1})+y^{n+1}\\&=x^{n+1}+y^{n+1}+\sum\limits_{i=1}^{n}(C_{n}^{i-1}x^{i}y^{n-i+1})+\sum\limits_{i=1}^n(C_n^ix^iy^{n-i+1})\\&=x^{n+1}+y^{n+1}+\sum\limits^n_{i=1}(C^{i-1}_n+C^{i}_n)(x^iy^{n-i+1})\\&=x^{n+1}+y^{n+1}+\sum\limits^n_{i=1}(C^i_{n+1}x^iy^{x-i+1}){\texttt{\color{red}(帕斯卡法则)}}\\&=\sum\limits_{i=0}^m(C_m^ix^iy^{m-i})\end{aligned}

所以对于 nN+n\in N^+,有 (x+y)n=i=0n(Cnixiyni)(x+y)^n=\sum\limits_{i=0}^n(C_n^ix^iy^{n-i})

8.4 杨辉三角

杨辉三角:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
......

对于第 ii 行第 jj 个数,有 y(i,j)=y(i1,j1)+y(i1,j),y(i,1)=y(i,i)=1y(i,j)=y(i-1,j-1)+y(i-1,j),y(i,1)=y(i,i)=1
可以发现,对于任意的 y(i,j)y(i,j),值为 CijC_i^j
所以杨辉三角又称作组合数表。

8.5 一些常用的式子

  • Cni=2n\sum C_n^i=2^n
  • Cniai=(a+1)n\sum C_n^ia^i=(a+1)^n
  • (Cni)2=C2nn\sum (C_n^i)^2=C_{2n}^n

例题:Necklace

九、卡特兰数

9.1 卡特兰数的定义

  • 卡特兰数的定义
    对于在 nn 位的 22 进制中,满足有 mm00,其余为 11 的数的个数。
    前几个卡特兰数:
1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790,477638700,1767263190,6564120420,24466267020,91482563640,343059613650,1289904147324,4861946401452,...1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...
  • 递推公式
    定义 h(i)h(i) 为卡特兰数第 ii 项。则:
h(n+1)=h(n)h(0)+h(n1)h(1)++h(0)(n)h(n+1)=h(n)h(0)+h(n-1)h(1)+\cdots+h(0)(n)

h(n)=i=0n1h(i)h(ni)h(n)=\sum\limits^{n-1}_{i=0}h(i)h(n-i)

还可以写作:

h(n)=h(n1)(4n2)n+1h(n)=\dfrac{h(n-1)(4n-2)}{n+1}
  • 通项公式
h(n)=C2nnn+1(nN)h(n)=\dfrac{C_{2n}^n}{n+1}\hspace{0.5cm}(n\in N) h(n)=C2nnC2nn1h(n)=C^n_{2n}-C^{n-1}_{2n}

9.2 c++求卡特兰数

void catalan() //求卡特兰数
{
int i, j, len, carry, temp;
a[1][0] = b[1] = 1;
len = 1;
for(i = 2; i <= 100; i++)
{
for(j = 0; j < len; j++) //乘法
a[i][j] = a[i-1][j]*(4*(i-1)+2);
carry = 0;
for(j = 0; j < len; j++) //处理相乘结果
{
temp = a[i][j] + carry;
a[i][j] = temp % 10;
carry = temp / 10;
}
while(carry) //进位处理
{
a[i][len++] = carry % 10;
carry /= 10;
}
carry = 0;
for(j = len-1; j >= 0; j--) //除法
{
temp = carry*10 + a[i][j];
a[i][j] = temp/(i+1);
carry = temp%(i+1);
}
while(!a[i][len-1]) //高位零处理
len --;
b[i] = len;
}
}

by 百度百科

9.3 卡特兰数的应用

十、欧拉筛

10.1 质数

  • 只能被 11 和自己整除的数,称为质数
  • NN 充分大时,11 ~ NN 范围内的质数个数约为 NlogN\dfrac{N}{\log N}
  • 在某个正整数 NN 附近找质数,能够在 logN\log N 期望时间内发现一个质数。
  • 如何判断一个整数 nn 是否为质数:22n\sqrt{n} 试除,发现约数则不是质数,复杂度 O(n)O(\sqrt{n})
  • aana\dfrac{n}{a} 中至少有 11 个数不超过 n\sqrt{n},完全平方数的情况 22 个数都等于 n\sqrt{n}

10.2 筛法(埃式筛)

  • 从小到大,依次将每个质数的倍数删去(若遍历到一个数时,其没有被删去,则可知这个数是质数),最终留下的全是质数。
f[1]=false;
for(int i=2;i<=n;i++) f[i]=true;
for(int i=2;i<=n;i++)
{
if(f[i]==true)
for(long long j=(long long)i*i;j<=n;j+=i)
f[j]=false;
}
  • jji×ii\times i 开始是因为 2×i2\times i3×i3\times i 等数字在 i=2,i=3i=2,i=3 的时候已经被枚举过了。
  • 时间复杂度 O(nloglogn)O(n\log\log n)

10.3 筛法(欧拉筛)

  • 数字 3030 还是被筛了多次(3×102×155×63\times 10、2\times15、5\times 6)。如果能保证每个合数都只被它的最小质因数筛掉就好了。
    比如 22 筛掉 46810124、6、8、10、12\cdots
    比如 33 筛掉 915219、15、21\cdots
    比如 55 筛掉 25355525、35、55\cdots
  • 我们记求解到 ii 的质数数组为 pp,则对于每个数字 ii,我们希望 i×p1i×p2i\times p_1、i\times p_2 等数字都被筛掉。这样一定是能筛干净的,因为合数 a=a= 某个质数 b×b\times 另一个数 cc,我们一定能在枚举到每个合数前,枚举到比它小的 cc,这样当 pj=bp_j=b 时,aa 就被干掉了。
  • 每个合数还是没有只被它的最小质因数筛。
  • 6060,被 3×203\times 20干掉一次,被 15×415\times 4干掉一次。
f[1]=false;
for(int i=2;i<=n;i++) f[i]=true;
for(int i=2;i<=n;i++)
{
if(f[i]==true) p[cnt++]=i;
for(int j=1;j<=cnt&&i*p[j]<=n;j++)
f[p[j]*i]=false;
}
  • 内层循环加上一句if(i%p[j]==0)break;即可。为什么?
  • 此时,比 p[j] 小的质数 p[k] 不满足 p[k] i|i,且 ii 的所有质因数肯定都比 p[j] 大,因为如果有小的那 jj 早就被停在前面了。故被筛掉的 i×i\times p[k] 的最小质因数肯定是 p[k]
  • 同理可证,设有比 p[j] 大的质数 p[l] ,则删 p[l] ×i\times i 一定会出现重复,因为假设 p[l] ×i/\times i / p[j]xx,当 ii 枚举到 xx 时候,x×x\times p[j] 又会把这个数字筛一次。
  • 时间复杂度 O(n)O(n)
f[1]=false;
for(int i=2;i<=n;i++) f[i]=true;
for(int i=2;i<=n;i++)
{
if(f[i]==true) p[cnt++]=i;
for(int j=1;j<=cnt&&i*p[j]<=n;j++)
{
f[p[j]*i]=false;
if(i%p[j]==0)break;
}
}

十一、逆元

11.1 逆元

a,x,pa,x,p 满足式子:

ax1(modp)ax\equiv 1 \pmod p

则称 xx 是模 pp 意义下 aa 的逆元。记作 x=a1x=a^{-1}

12.1 求逆元

  • exGCD法
    详见12.3
  • 快速幂法
    详见17.?
  • 线性求 1n1\sim n 逆元
    证明详见 oi.wiki
inv[1] = 1;
for (int i = 2; i <= n; ++i) {
inv[i] = (long long)(p - p / i) * inv[p % i] % p;
}

by oi-wiki

  • 线性求 a1ana_1\sim a_n 的逆元
    详见12.4

十二、exGCD(扩展欧几里得)

12.0 不定方程

已知有多个个未知数,11 个方程,我们称其为不定方程。

不定方程组同理。

12.1 扩展欧几里得是什么?

关于 x,yx,y 的不定方程的一组解:

ax+by=gcd(a,b)ax+by=\gcd(a,b)

12.2 求解方程

  • 代码实现
void exgcd(int a, int b, int &x, int &y)
{
if(b == 0)
{
x = 1, y = 0;
return ;
}
exgcd(b, a % b, y, x);
y -= a / b * x;
}

12.3 exGCD 求逆元

可以从 axx(modp)ax \equiv x\pmod{p} 这个式子入手。很容易发现,它和 y,ax+py=1\exists y,ax+py=1 等价。( \exists 表示存在)而这个式子就是一个关于 a,pa,p 的不定方程,就可以用扩展欧几里得算法来解决。并由裴蜀定理,可以发现 aa 在模 pp 意义下逆元当且仅当 gcd(a,p)=1\gcd(a,p)=1aapp 互质,即 apa\perp p

void exgcd(int a, int b, int &x, int &y)
{
if(b == 0)
{
x = 1, y = 0;
return ;
}
exgcd(b, a % b, y, x);
y -= a / b * x;
}
int inv(int a, int p)
{
int x, y;
exgcd(a, p, x, y);
return x;
}

12.4 exGCD求 a1ana_1\sim a_n 的逆元

pi=j=1iajp_i=\prod\limits_{j=1}^{i} a_j

那么我们可以用exGCD求出 pi1{p_i}^{-1},记作 viv_i

此时 vi×an=(i=1n1ai)1v_i\times a_n={\begin{pmatrix}\prod\limits_{i=1}^{n-1}a_i\end{pmatrix}}^{-1},记作 vi1v_{i-1},同理,可以求出 v1vnv_1\sim v_n

ai1=vi×pi1{a_i}^{-1}=v_i\times p_{i-1}

12.5 exGCD求 ab modp\dfrac{a}{b}\bmod p

abx(modp)\dfrac{a}{b}\equiv x\pmod p

那么 abx(modp)a\equiv bx\pmod p

x=xax'=\dfrac{x}{a},那么 bx1(modp)bx'\equiv 1\pmod p

这个方程是可以解的。最终 x=axx=ax'

十三、中国剩余定理

13.0 中国剩余定理的来源

「物不知数」问题:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?

该问题最早见于《孙子算经》中,并有该问题的具体解法。宋朝数学家秦九韶于 1247 年《数书九章》卷一、二《大衍类》对「物不知数」问题做出了完整系统的解答。上面具体问题的解答口诀由明朝数学家程大位在《算法统宗》中给出:

三人同行七十希,五树梅花廿一支,七子团圆正半月,除百零五便得知。

13.1 线性同余方程组

给定 nn 个线性同余方程:

{xa1(modm1)xa2(modm2)xan(modmn)\begin{cases}x\equiv a_1\pmod {m_1}\\x\equiv a_2\pmod {m_2}\\\cdots\\x\equiv a_n\pmod {m_n}\end{cases}

mim_i 两两互质,求 xx 的通解。

13.2 中国剩余定理(CRT)

M=miM=\prod m_iMi=MmiM_i=\dfrac{M}{m_i}tit_i 是在 MiM_i 在模 mim_i 意义下的逆元。

则:

x=kM+i=1naitiMix=kM+\sum_{i=1}^{n} a_it_iM_i

13.3 扩展中国剩余定理(exCRT)

如果 mim_i 两两不互质,那么就不能使用 CRT 了。

那什么是 exCRT 呢?

如果我们知道两个同余方程,将其合并成一个,这样就可以一个接着一个合并了。

?

十四、裴蜀定理

方程 ax+by=cax+by=c 有解当且仅当 gcd(a,b)c\gcd(a,b)|c

十五、数论分块

十六、同余与剩余系

十七、费马小定理

lhq:费马小

费马小定理:如果质数 pp 满足 apa\bot p,则 ap11(modp)a^{p-1}\equiv 1\pmod p

  • 另一个形式:对于任意整数 aaapa(modp)a^p\equiv a\pmod p

总所周知,费马小也是可以求逆元的。

本文作者:sLMxf

本文链接:https://www.cnblogs.com/SLMXF/p/18564553

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   sLMxf  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起