算法竞赛进阶指南_打卡_数学证明篇_0x30
数学这个东西就比较神奇,没懂证明直接用也不是不行。
但是理解就会少了不少,所以这里开证明篇。为了以后忘了把自己说明白。
这十几天数学知识部分把人看麻了()
0x00_约数:
更相减损法:\(\gcd (a,b)=\gcd (b,a-b)=\gcd (a,a-b)\)(\(a|b\)等价于\(b\)能整除\(a\))
证明:
记\(d\)有\(d|a,d|b\),\(d\)属于\(a,b\)的公约数集合。
当\(a\)>=\(b\),记\(a=q*b+r\)。因为\(d|a,d|b\),则\(d|(a-b)\)。
则\((a-b)\)的约数集合完全包含\(d\)。并且\(b\)的约数集合完全包含\(d\)。
因此\((b,(a-b))\)的公约数集合完全包含\((a,b)\)的公约数集合。
因此\((b,(a-b))\)的最大公约数也一定为\((a,b)\)的最大公约数。
因此\(\gcd (a,b)=\gcd (b,a-b)\)。
\(\gcd (a,b)=\gcd (a,a-b)\)同理。
下面证同理如何证明,同理可证只细写这一次
记\(d\)有\(d|a,d|b\),\(d\)属于\(a,b\)的公约数集合。
当\(a\)>=\(b\),记\(a=q*b+r\)。因为\(d|a,d|b\),则\(d|(a-b)\)。
则\((a-b)\)的约数集合完全包含\(d\)。并且\(a\)的约数集合完全包含\(d\)。
因此\((a,(a-b))\)的公约数集合完全包含\((a,b)\)的公约数集合。
因此\((a,(a-b))\)的最大公约数也一定为\((a,b)\)的最大公约数。
因此\(\gcd (a,b)=\gcd (a,a-b)\)。
辗转相除法:\(\gcd(a,b)=\gcd(b,a\mod b)\)
证明:
记\(d\)有\(d|a,d|b\),\(d\)属于\(a,b\)的公约数集合。
①:
当\(a\)>=\(b\),记\(a=q*b+r\)。因为\(d|a,d|b\),则\(d|(q*b)\),\(d|(a-q*b)\)。
又因为\(a-q*b\) = \(a \mod b\) = \(r\),因此\(d|(a \mod b)\),\(d|r\)。
则\(r\)的约数集合完全包含\(d\)。并且\(b\)的约数集合完全包含\(d\)。
因此\((r,(a-b))\)的公约数集合完全包含\((a,b)\)的公约数集合。
因此\((r,(a-b))\)的最大公约数也一定为\((a,b)\)的最大公约数。
因此\(\gcd (a,b)=\gcd (b,a \mod b)\)。
②:
当\(a\)<\(b\)。因此\(a \mod b\)=\(a\)。
经过\(\gcd(a,b)=\gcd(b,a\mod b)\)转换后,上述\(a,b\)大小不变交换位置,转证①。
欧拉函数:\(\varphi (n)\)=小于\(n\)且与\(n\)互质的数。(\(a,b\)互质等价与\(\gcd(a,b)\)=\(1\))
对\(n\)质因数分解,\(n\)=\(p_{1}^{m_{1}}*p_{2}^{m_{2}}*...*p_{k}^{m_{k}}\)
\(\varphi (n)\)=\(n\)*\(\prod(1-\frac{1}{p_{i}})\)
证明:
容易可知,如果要满足\(gcd(n,b)\)=\(1\),则\(n,b\)不能出现除\(1\)之外的公因子。
我们已经将\(n\)分解为\(n\)=\(p_{1}^{m_{1}}*p_{2}^{m_{2}}*...*p_{k}^{m_{k}}\)的格式。
因此\(n\)的所有可能因子为质因子的所有组合。
我们可以这样想:
\(q \in (1,n)\)
\(p_{i}|q\)的数一共有\(n/p_{i}\)个。
\(p_{i}|q\)且\(p_{j}|q\)的数一共有\(n/(p_{i}*p_{j})\)个。
当我们\(n-\frac{n}{p_{1}}-\frac{n}{p_{2}}...-\frac{n}{p_{k}}\)时,筛去了能被\(p_{1},...,p_{k}\)整除的所有数。
但是我们一定会将不少数重复筛去。
为了只筛去一次,所以我们要将重复筛掉的加回去。
当有一个数为\(p_{i}*p_{j}\),它既在\(\frac{n}{p_{i}}\)中筛去,又在\(\frac{n}{p_{j}}\)中筛去,因此我们要加上\(\frac{n}{p_{i}*p_{j}}\),保证\({p_{i}*p_{j}}\)只被筛一次。
当有一个数为\(p_{i}*p_{j}*p_{k}\),它在\(\frac{n}{p_{i}}\)中筛去,在\(\frac{n}{p_{j}}\)中筛去,在\(\frac{n}{p_{k}}\)中筛去,而在\(\frac{n}{p_{i}*p_{j}}\),\(\frac{n}{p_{i}*p_{k}}\),\(\frac{n}{p_{j}*p_{k}}\)中加回去,因此我们要减去一个\(\frac{n}{p_{i}*p_{j}*p_{k}}\),保证筛去\({p_{i}*p_{j}*p_{k}}\)。
以此类推,为偶数个质因数要加上\(\frac{n}{q}\),否则减去一个\(\frac{n}{q}\)。
因此有公式\(\varphi (n)\)=\(n-\frac{n}{p_{1}}-\frac{n}{p_{2}}...-\frac{n}{p_{k}}+\frac{n}{p_{1}*p_{2}}+\frac{n}{p_{1}*p_{3}}...+\frac{n}{p_{k}*p_{k-1}}-\frac{n}{p_{1}*p_{2}*p_{3}}...\)
将公式整理,得\(\varphi (n)\)=\(n\)*\(\prod(1-\frac{1}{p_{i}})\)
证毕。
欧拉函数的推论:
①若\(p\)为质数,且\(p|n\),\(p^2|n\),则\(\varphi(n)=\varphi(n/p)*p\)
②若\(p\)为质数,且\(p|n\),\(p^2\nmid n\),则\(\varphi(n)=\varphi(n/p)*(p-1)\)
③\(\sum_{d|n}\varphi(d)\)=\(n\)
证明:
①:
我们可以知道\(\varphi(n)\)与\(\varphi(n/p)\)中包含的整数均只差\(p\)的一倍
因此\(n\)与\(n/p\)存在完全相同的质因子。
我们可以对\(\varphi(n)\)和\(\varphi(n/p)\)展开,得
\(\varphi(n)\)=\(n*\prod_{i=1}^{k}(1-\frac{1}{p_{i}})\)
\(\varphi(n/p)\)=\((n/p)*\prod_{i=1}^{k}(1-\frac{1}{p_{i}})\)因此有\(\varphi(n)\)=\(\varphi(n/p)*p\)
证毕。②:
有积性函数的性质,有
\(\varphi(n)\)=\(\varphi(n/p)*\varphi(p)\)
由于\(p\)为质数,因此\(\varphi(n)\)=\(\varphi(n/p)*(p-1)\)
证毕。
③:
我们设有\(f(n)\)=\(\sum_{d|n}\varphi(d)\)
因此\(f(n)*f(m)=\sum_{d|n}\varphi(d)*\sum_{d|m}\varphi(d)\)
化简,得
\(f(n)*f(m)=\sum_{d|nm}\varphi(d)\)
因此\(f(n)*f(m)\)=\(f(n*m)\)
因此\(f(n)\)为积性函数
我们设存在一个数\(p^k\),由性质①,则有\(\varphi(p^k)\)=\(\varphi(p^{k-1})*p\)
如此化简,得
\(\varphi(p^k)\)=\(\varphi(p)*p^{k-1}\)=\(p^{k}-p^{k-1}\)
因此\(f(p^k)\)=\(\sum_{d|n}\varphi(d)\)=\(\varphi(1)+\varphi(p)+...+\varphi(p^k)\)=\(1+(p-1)+(p^2-p)+...+(p^k-p^{k-1})\)
化简,得
\(f(p^k)\)=\(p^k\),相等的,\(f(n)\)=\(n\),故\(\sum_{d|n}\varphi(n)\)=\(n\)。
证毕。
0x10_同余:
欧拉定理:若\(a\)与\(p\)互质,则有\(a^{\varphi(p)} \equiv 1 \mod p\)
(简化剩余系:当\(a \mod p\)时,属于\([1,p)\)且与\(p\)互质的所有数{\(p_{1},...,p_{\varphi(p)}\)})
(简化剩余系在模意义下关于乘法运算封闭:若\(c\),\(p\)互质,则有\((c*p_{i})\mod p\)=\(简化剩余系元素\))
证明:
我们可以得到关于\(p\)的简化剩余系{\(p_{1},...,p_{\varphi(p)}\)}。
我们知道简化剩余系在模意义下关于乘法运算封闭。
我们假设有\(a*p_{i}\equiv (a*p_{j}) \mod p,p_{i}\)!=\(p_{j}\)。
我们记\(a*p_{i}\)=\(q*p+r\),所以\(a*p_{j}\)=\(q'*p+r\)。
又因为关于\(p\)的简化剩余系小于\(p\)。
因此\(p_{i}\in [1,p)\),因为\(a*p_{i}与a*p_{j}\)分别为\(p_{i},p_{j}\)的倍数。因此\(p_{i}=a*p_{i}\mod p\),\(p_{j}=a*p_{j}\mod p\)。
所以\(p_{i}\)==\(p_{j}\),所以假设不成立。因此对于每一个\(a*p_{i}\)对每一个简化剩余系的集合映射是一 一对应的。
因此\((a*p_{1})*(a*p_{2})*...*(a*p_{\varphi(p)})\equiv p_{1}*p_{2}*...*p_{\varphi(p)} \mod p\)
\(a^{\varphi(p)}*p_{1}*p_{2}*...*p_{\varphi(p)}\equiv p_{1}*p_{2}*...*p_{\varphi(p)} \mod p\)
因此\(a^{\varphi(p)}\equiv 1 \mod p\)
证毕。
费马小定理:若\(p\)为质数,则\(a^{p}\equiv a \mod p\)
证明:
有欧拉定理,我们可以得,\(a^{p-1}\equiv 1 \mod p\)(因为\(\varphi(p)\)=\(p-1\))
两边同时乘\(a\),得费马小定理。
证毕。
欧拉定理推论:若\(a,p\)互质,对于任意\(b\),有\(a^b \equiv a^{b\mod\varphi(p)} \mod p\)
证明:
由欧拉定理,有\(a^{\varphi(p)}\equiv 1 \mod p\)
我们记\(b=q*\varphi(p)+r\)
因此,\(a^{b}=a^{q*\varphi(p)+r}\)
得\((a^{\varphi(p)})^q*a^r=a^b\),\((a^{\varphi(p)})^q*a^r \equiv (1)^q*a^r\equiv a^r \mod p\)
因此\(a^b \equiv a^{b\mod\varphi(p)} \mod p\)。
证毕。
裴蜀定理:对于任意\(a,b\),存在整数解\(x,y\),使得\(a*x+b*y\)=\(\gcd(a,b)\)
这大佬证的实在是太强了,我觉得直接贴他的好了。
原链:https://zhuanlan.zhihu.com/p/35727703
证明:
中国剩余定理:若\(m_{1}...m_{n}\)两两互质,存在方程
\(\left\{\begin{matrix}
x\equiv a_{1} \mod m_{1}\\
x\equiv a_{2} \mod m_{2}\\
...\\
x\equiv a_{n} \mod m_{n}
\end{matrix}\right.\)
我们记\(m\)=\(\prod_{i=1}^{n} m_{i}\),\(M_{i}\)=\(\frac{m}{m_{i}}\)。
对于每一个\(M_{i}\),存在\(t_{i}\)有\(M_{i}*t_{i}\equiv 1 \mod m_{i}\)。
其解为\(x=\sum_{i=1}^{n} a_{i}*M_{i}*t_{i}\)
证明:
因为有\(M_{i}*t_{i}\equiv 1 \mod m_{i}\)。
因此\(a_{i}*M_{i}*t_{i}\equiv a_{i} \mod m_{i}\)。
又因为一个\(M_{i}\)才会不包含\(m_{i}\)因子,其余\(M_{j}\)均包含因子\(m_{i}\)。
故只有\(M_{i} \mod m_{i}\)!=\(0\),对于\(i\)!=\(j\),均有\(M_{j} \mod m_{i}\)=\(0\)。
因此\(a_{i}*M_{i}*t_{i}\)是关于第\(i\)个方程的解。因此总方程的解为\(x=\sum_{i=1}^{n} a_{i}*M_{i}*t_{i}\)。
证毕。
注:此解不一定为最小解。
0x20_组合数学
卢卡斯定理:若\(p\)为质数,\(C_{n}^{m} \equiv C_{n \mod p}^{m \mod p} *C_{\frac{n}{p}}^{\frac{m}{p}}\mod p\)。
证明:
我们首先对二项式\((1+x)^p\)进行分解。
由二项式定理,得\((1+x)^p\)=\(C_{p}^{0}*x^0+C_{p}^{1}*x^1+...+C_{p}^{p}*x^p\)可以知道每一个\(C_{p}^{i}\),在当\(i\in [1,p-1]\)时,其存在一个\(p\)的因子。
因此可得\(C_{p}^{0}*x^0+C_{p}^{1}*x^1+...+C_{p}^{p}*x^p \equiv (C_{p}^{0}*x^0+C_{p}^{p}*x^p) \mod p\)
也就是\((1+x)^p \equiv (1+x^p) \mod p\)
我们将\(m,n\)转化为另一种形态,得
\(m\)=\(m_{0}*p^{0}+m_{1}*p^1+m_{2}*p^2+...+m_{k}*p^k\)
\(n\)=\(n_{0}*p^{0}+n_{1}*p^1+n_{2}*p^2+...+n_{k}*p^k\)
因此\((1+x)^n\)=\((1+x)^{n_{0}}*((1+x)^{n_{1}})^{p^{1}}...*((1+x)^{n_{k}})^{p^{k}}\)
化简,得
\((1+x)^n\equiv (1+x^{n_{0}})*(1+x^{n_{1}})^{p^{1}}...*(1+x^{n_{k}})^{p^{k}} \mod p\)
对于计算\(C_{n}^{m}\)可以看做计算\((1+x)^n\)中关于\(x^m\)的系数
所以有\(C_{n}^{m}\equiv C_{n_{k}}^{m_{k}}*C_{n_{k-1}}^{m_{k-1}}*...*C_{n_{0}}^{m_{0}} \mod p\)
\(C_{n_{k}}^{m_{k}}*C_{n_{k-1}}^{m_{k-1}}*...*C_{n_{0}}^{m_{0}}\)意为对于每一个\(n_{i}\)最后总共能够组成\(x^m\)的所有组合的可能。
将上式化简,得
\(C_{n}^{m} \equiv C_{n \mod p}^{m \mod p} *C_{\frac{n}{p}}^{\frac{m}{p}}\mod p\)
证毕