7.2 KiB
数论(一)
1.同余系统
1.1 最大公约数(Greatest common divisor)
1.1.1 $\gcd(x,y)$表示x和y的最大公约数,也叫最大公因数,例如\gcd(6,15)=3
欧几里得对“公约”的解释,给定两条长度不同的线段 a 和 b ,如果能够找到第三条线段 c ,它既可以度量 a ,又可以度量 b ,我们就说 a 和 b 是可公约的(commensurable),最大可能的c就是a和b的最大公约数
1.1.2 如果两个数的最大公约数是1,那么这两个数成是互质的(relatively prime),比如说\gcd(7,10)=1
互质的几何意义,如果 a 和 b 互质,这就意味着分数 a / b 已经不能再约分了,意味着 a × b 的棋盘的对角线不会经过中间的任何交叉点,意味着循环长度分别为 a 和 b 的两个周期性事件一同上演,则新的循环长度最短为 a × b 。
1.1.3 最大公约数一般使用欧几里得碾压相除法(Euclidean algorithm)计算
欧几里得算法使用了如下递归式
\gcd(n,m)=\gcd(m, n\bmod m)
$\gcd(69,21)=3$的计算方法
\gcd(69,21)=\gcd(21,6)=\gcd(6,3)=3
1.2 最小公倍数(Least Common Multiple)
$lcm(x,y)$表示x和y的最小公倍数,例如lcm(45,30)=90
\gcd(x,y)\times lcm(x,y)=xy
1.3 模运算
1.3.1 x\bmod{n} 是$x$除以$n$的余数,例如13\bmod{5}=3
1.3.2 模运算符合交换律,结合律和分配律
\begin{split} (a+b)\bmod n &=((a\bmod n)+(b\bmod n))\bmod n \\
(a-b)\bmod n &=((a\bmod n)-(b\bmod n))\bmod n \\
(a\times b)\bmod n &=((a\bmod n)\times(b\bmod n))\bmod n \\
(a\times (b+c))\bmod n &=(((a\times b)\bmod n)+((a\times c)\bmod n))\bmod n \end{split}
1.3.3 如何计算a^x\bmod n
如果$x$是2的幂次方,例如16,那么 a^{16}\bmod n=(((a^2\bmod n)^2\bmod n)^2\bmod n)^2\bmod n
如果$x$不是2的幂次方,例如a^{25}\bmod n
25=16+8+1=(2+1)\times2\times2\times2+1
a^{25}=a^{(2+1)\times2\times2\times2+1}=(((a^2\times a)^2)^2)^2\times a
a^{25}\bmod n=(((((((a^2\bmod n)\times a)\bmod n)^2\bmod n)^2\bmod n)^2\bmod n)\times a)\bmod n
1.4 同余等式
如果$a$和$b$除$n$的余数相同,那么记为a\equiv b\pmod n
如果$a\equiv b\pmod n$,那么b\equiv a\pmod n
如果$a\equiv b\pmod n, b\equiv c\pmod n$,那么记为a\equiv b\equiv a\pmod n
如果$a_1\equiv b_1\pmod{m}, a_2\equiv b_2\pmod{m}, \ldots, a_n\equiv b_n\pmod{m}$,那么
\begin{split} a_1+a_2+\ldots+a_n &\equiv (b_1+b_2+\ldots+b_n)\pmod{m} \\ a_1a_2\ldots a_n &\equiv (b_1 b_2\ldots b_n)\pmod{m}\end{split}
2.中国剩余定理
2.1 孙子算经中的问题
“今有物,不知其数。三、三数之,剩二;五、五数之,剩三;七、七数之,剩二。问物几何?答曰:二十三。”
《孙子算经》卷下第二十六问
2.2 数学解释
有$m$个两两互质的数,其乘积为$P$,有一个未知数$M$,如果我们已知$M$分别除以这$m$个数所得的余数,那么在0到$P – 1$的范围内,我们可以唯一地确定这个M
2.3 直觉
两个除数的情况为例,假设两个除数分别是 4 和 7。下表显示的就是各自然数除以 4 和除以 7 的余数情况
i |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
i\bmod 4 |
0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
i\bmod 7 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 |
i |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
i\bmod 4 |
0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 | 0 | 1 | 2 | 3 |
i\bmod 7 |
6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 0 | 1 | 2 | 3 | 4 |
可以看出,$i\bmod 4, i\bmod 7$的结果以$4×7 = 28$长度循环,每种特性的组合都在这28个结果中出现,所以一旦确定$i \bmod 4$和$i \bmod 7$的余数,就一定能唯一判定出i
2.4 数学表达
已知$m_1,m_2,\ldots,m_k$是两两互质的正整数,有未知数$x$满足同余方程组
x\equiv a_1\pmod{m_1} \\
x\equiv a_2\pmod{m_2} \\
\cdots \\
x\equiv a_k\pmod{m_k} \\
那么
x=(a_1M_1M_1^{-1}+a_2M_2M_2^{-1}+\ldots+a_kM_kM_k^{-1})\bmod {M}
其中M=m_1\cdot m_2\cdot\ldots\cdot m_k, M_i=M/m_i, 而$M_i^{-1}$是$M_i$的逆元(见3.3节),也就是M_iM_i^{-1}\equiv 1\pmod{m_i}
2.5 举例,孙子算经中的问题
$m_1=3,m_2=5,m_3=7,a_1=2,a_2=3,a_3=2$,那么 $$\begin{split} M&=3\times5\times7=105\ M_1&=5\times7=35\ M_2&=3\times7=21\ M_3&=3\times5=15\ M_1^{-1}&=35^{\phi(3)-1}\bmod{2}=2 \ M_2^{-1}&=21^{\phi(5)-1}\bmod{5}=1 \ M_3^{-1}&=15^{\phi(7)-1}\bmod{7}=1 \ x&=(2\times35\times2+3\times21\times1+2\times15\times1)\bmod 105=23 \end{split}
## 3.欧拉定理
### 3.1 欧拉函数
任意给定正整数$n$,小于等于$n$的正整数之中,与n构成互质关系的数的个数记为$\phi(n)$
$$\phi(1)=1$$
如果$p$是质数,那么$\phi(p)=p-1$, $\phi(p^k)=p^k-p^{k-1}$
如果$n=pq, \phi(n)=\phi(p)\phi(q)=(p-1)(q-1)$
如果$n=p_1^{k1}p_2^{k2}\ldots p_r^{kr}$,那么
\phi(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})\ldots(1-\frac{1}{p_r})
比如$\phi(1323)=\phi(3^3\times 7^2)=1323(1-\frac{1}{3})(1-\frac{1}{7})=756$
### 3.2 欧拉定理
如果$a$和$n$互质,那么
a^{\phi(n)}\equiv1\pmod n
#### 3.2.1
$\phi(10)=4$,$7^{\phi(10)}\equiv7^4\equiv2401\equiv1\pmod {10}$
#### 3.2.2
$7^{4k}\equiv(7^4)^k\equiv\underbrace{7^4\times 7^4\times\ldots\times7^4}_{\text k}\equiv\underbrace{1\times 1\times\ldots\times1}_{\text k}\pmod n$,所以$7^{4k}$尾数一定是1
#### 3.2.3
由于$7^{4k}\equiv1\pmod {10}, 7^{2}\equiv9\pmod {10}$, 所以$7^{222}\equiv 7^{4\times55+2}\equiv(\underbrace{1\times 1\times\ldots\times 1}_{55}\times 9)\pmod{10}$,所以$7^{222}$尾数为9
### 3.3 模反元素(逆元)
如果$a$和$n$互质,那么$ax\equiv 1\pmod n$有解,$x$称为$a$模$n$的模反元素
#### 3.3.1
用欧拉定理证明$a^{\phi(n)}\equiv a\times a^{\phi(n)-1}\equiv1\pmod {n}$,所以$a^{\phi(n)-1}+kn$都是a的模反元素
#### 3.3.2
例如求解同余方程$3x\equiv1\pmod{11}$,那么$3^{\phi(11)-1}\equiv3^9\equiv19683\equiv4\pmod{11}$,所以$4+11k$都是同余方程的解
### 3.4 费马小定理
根据欧拉定理,当$p$是一个质数时,对于任意正整数$a$,有$a^p\equiv a\pmod{p}$,如果$p\nmid a$,那么
a^{p-1}\equiv1\pmod{p}
## 4.扩展碾压相除法
### 4.1 裴蜀定理
对于方程$ax+by=d$,当且仅当$\gcd(a,b)\mid{d}$时,方程有整数解
### 4.2 算法实现
对于方程$ax+by=\gcd(a,b)$, 假设方程$bx+(a\bmod b)y=\gcd(a,a\bmod b)$有整数解$(x',y')$,由于$\gcd(a,b)=\gcd(b,a\bmod b)$,可以得到
ax+by=bx'+(a\bmod b)y'=ay'+b(x'-\lfloor\frac{a}{b}\rfloor y')
所以
x=y', y=x'-\lfloor\frac{a}{b}\rfloor y'
用递归算法实现
```cpp :no-line-numbers
pair<int,int> exgcd(int a,int b){
if(b == 0)return make_pair(1,0);
pair<int,int>temp = exgcd(b,a%b);
pair<int,int>ans = make_pair(temp.second,temp.first-(int)(a/b)*temp.second);
return ans;
}
```

