ACM中一些常用数学公式定理的简单推理及证明

数学蒟蒻表示这也太难了(sad)


更相减损术

g c d ( a , b ) = g c d ( a , b − a ) gcd(a,b)=gcd(a,b-a) gcd(a,b)=gcd(a,ba)

证 明 : 证明:

若有 g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d,则有 a = k 1 d ,   b = k 2 d a=k_1d,\ b=k_2d a=k1d, b=k2d,且 k 1 k_1 k1 k 2 k_2 k2一定互质,即 g c d ( k 1 , k 2 ) = 1 gcd(k_1,k_2)=1 gcd(k1,k2)=1
g c d ( a , b − a ) = x d gcd(a,b-a)=xd gcd(a,ba)=xd,也就是 g c d ( k 1 d , ( k 2 − k 1 ) d ) = x d gcd(k_1d,(k_2-k_1)d)=xd gcd(k1d,(k2k1)d)=xd,化简为 g c d ( k 1 , k 2 − k 1 ) = x gcd(k_1,k_2-k_1)=x gcd(k1,k2k1)=x
同样的,可以设 k 1 = t 1 x ,   k 2 − k 1 = t 2 x k_1=t_1x,\ k_2-k_1=t_2x k1=t1x, k2k1=t2x
k 1 = t 1 x ,   k 2 = ( t 1 + t 2 ) x k_1=t_1x,\ k_2=(t_1+t_2)x k1=t1x, k2=(t1+t2)x

因为前面有 g c d ( k 1 , k 2 ) = 1 gcd(k_1,k_2)=1 gcd(k1,k2)=1,所以此处 x x x只能等于 1 1 1

所以,有 g c d ( a , b ) = g c d ( a , b − a ) gcd(a,b)=gcd(a,b-a) gcd(a,b)=gcd(a,ba)

并且,该定理可以推广到多个数,即 g c d ( a , b , c , . . . ) = g c d ( a , b − a , c − b , . . . ) gcd(a,b,c,...)=gcd(a,b-a,c-b,...) gcd(a,b,c,...)=gcd(a,ba,cb,...)
简单证明:
g c d ( a , b , c ) = g c d ( a , g c d ( b , c ) )                     = g c d ( a , b , c − b )                     = g c d ( g c d ( a , b ) , c − b )                     = g c d ( a , b − a , c − b ) gcd(a,b,c)=gcd(a,gcd(b,c))\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =gcd(a,b,c-b)\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =gcd(gcd(a,b),c-b)\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =gcd(a,b-a,c-b) gcd(a,b,c)=gcd(a,gcd(b,c))                   =gcd(a,b,cb)                   =gcd(gcd(a,b),cb)                   =gcd(a,ba,cb)


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

g c d ( a , b ) = g c d ( b , a   m o d   b ) gcd(a,b)=gcd(b,a\ mod\ b) gcd(a,b)=gcd(b,a mod b)

证 明 : 证明: :
a = k b + r a=kb+r a=kb+r,则 g c d ( b , a   m o d   b ) = g c d ( b , r ) gcd(b,a\ mod\ b)=gcd(b,r) gcd(b,a mod b)=gcd(b,r)
g c d ( a , b ) = d gcd(a,b)=d gcd(a,b)=d,则有 d ∣ a d|a da d ∣ b d|b db,而 r = a − k b r=a-kb r=akb,所以一定也有 d ∣ r d|r dr
所以 g c d ( b , r ) = d gcd(b,r)=d gcd(b,r)=d

证得: g c d ( a , b ) = g c d ( b , a   m o d   b ) gcd(a,b)=gcd(b,a\ mod\ b) gcd(a,b)=gcd(b,a mod b)


扩展欧几里得算法(exgcd)

请看这里。


快速幂

快速幂是用来快速的求得 a b a^b ab

简 单 推 理 : 简单推理: :
将b按二进制权展开,有
b = k n 2 n + k n − 1 2 n − 1 + . . . + k 1 2 1 + k 0 2 0 b=k_n2^n+k_{n-1}2^{n-1}+...+k_12^1+k_02^0 b=kn2n+kn12n1+...+k121+k020
k k k的取值要么是 0 0 0,要么是 1 1 1
a b = a k n 2 n + k n − 1 2 n − 1 + . . . + k 1 2 1 + k 0 2 0 a^b=a^{k_n2^n+k_{n-1}2^{n-1}+...+k_12^1+k_02^0} ab=akn2n+kn12n1+...+k121+k020
因为 a 2 i ∗ a 2 i = a 2 i + 1 a^{2^i}*a^{2^i}=a^{2^{i+1}} a2ia2i=a2i+1,由这个性质可以快速的计算 a b a^b ab

具体操作是:
3 45 3^{45} 345为例 \2,954,312,706,550,833,698,643
45 = ( 101101 ) 2 45=(101101)_2 45=(101101)2
从二进制的低位到高位计算。
初始时答案 a n s = 1 ans=1 ans=1,目前的次方数为 p = 3 2 0 p=3^{2^0} p=320
如果二进制第0位是1,让 a n s = a n s ∗ p ans=ans*p ans=ansp
如果是 0 0 0就不需要乘。
每操作完一位后,让 p = p ∗ p p=p*p p=pp,此时 p = 3 2 1 p=3^{2^1} p=321,然后进行下一位的判断。
.
最后得到 a n s = 3 2 0 ∗ 3 2 2 ∗ 3 2 3 ∗ 3 2 5 ans=3^{2^0}*3^{2^2}*3^{2^3}*3^{2^5} ans=320322323325
如果一个一个乘,我们需要乘 45 45 45次,而快速幂只需要 l o g 2 45 log_245 log245次。


逆元

请看这里。


线性同余方程

线性同余方程就是给出一个这种形式的方程,求出x:
a x ≡ b    ( m o d    m ) ax\equiv b\ \ (mod\ \ m) axb  (mod  m)

等价于求:

a x = m y + b ax=my+b ax=my+b
a x − m y = b ax-my=b axmy=b(因为y是一个未知数,可以把y前面的负号合并到y里面,不影响x的值)
也就是: a x + m y = b ax+my=b ax+my=b

由exgcd知,一定有 a x 0 + m y 0 = d ax_0+my_0=d ax0+my0=d,( d d d g c d ( a , m ) gcd(a,m) gcd(a,m))。

a x 0 + m y 0 = d ax_0+my_0=d ax0+my0=d

两边同时乘一个 b d \frac{b}{d} db:
b d ∗ a x 0 + m y 0 = b d ∗ d \frac{b}{d}*ax_0+my_0=\frac{b}{d}*d dbax0+my0=dbd

也就是:
a ( b d x 0 ) + m ( b d y 0 ) = b a(\frac{b}{d}x_0)+m(\frac{b}{d}y_0)=b a(dbx0)+m(dby0)=b

得到一组特解为:
{ x = b d x 0 y = b d y 0 \begin{cases} x=\frac{b}{d}x_0\\y=\frac{b}{d}y_0 \end{cases} {x=dbx0y=dby0

通解为:

设有一组特解 x 0 , y 0 x0,y0 x0,y0
{ x = x 0 + k m d y = y 0 − k a d \begin{cases} x=x_0+k\frac{m}{d}\\y=y_0-k\frac{a}{d} \end{cases} {x=x0+kdmy=y0kda

注意:这里的 x 0 , y 0 x_0,y_0 x0,y0不是上面的 x 0 , y 0 x_0,y_0 x0,y0


约数和质数

1、一个数的约数个数和约数之和的求法。

2、线性筛法简单证明:
线性筛法的思想是对于每一个数,只用它的最小的质因子去筛它。

例,求 1 1 1~ n n n内的所有质数。

具体执行是:

首先,按顺序枚举 2 2 2—> n n n的每一个数。
枚举到 i i i的时候,如果 i i i没有被 1 1 1~ i − 1 i-1 i1中的任何一个质数筛掉,说明 i i i本身就是一个质数,那 么将 i i i加入质数集合中,如果被筛掉了(说明不是质数),就不需要加。

接下来,在质数集合中从小到大枚举现有的所有质数。
枚举到 p j p_j pj时,令 x = p j ∗ i x=p_j*i x=pji
如果 i % p j ! = 0 i\%p_j!=0 i%pj!=0,说明 p j p_j pj一定是 p j ∗ i p_j*i pji的最小质因子,将它筛去(因为它不是质数)。
否则, i % p j = = 0 i\%p_j==0 i%pj==0,说明 p j p_j pj一定是 i i i的最小质因子(因为 p j p_j pj是从小到大枚举的,当第一次出现 i % p j = = 0 i\%p_j==0 i%pj==0的情况时,一定成立),也是 p j ∗ i p_j*i pji的最小质因子,同样把它筛掉,然后停止枚举(也就是,当出现了 i % p j = = 0 i\%p_j==0 i%pj==0的情况后,就不在往下枚举了)。

我们可以证明,对于任意一个数 x x x,设 x x x的最小质因子是 p p p
当上面的 i i i枚举到 x p \frac{x}{p} px的时候, x x x一定会在这个时候被筛去。所以不会存在某一个数被漏掉的情况。


欧拉函数

请看这里。


费马小定理与欧拉定理

费马小定理:
如果 p p p是一个质数,而整数 a a a p p p互质,则有 a p − 1 ≡ 1 ( m o d   p ) a^{p-1}≡1(mod\ p) ap11mod p

欧拉定理:
对于任意互质的 a a a n n n,有 a φ ( n ) ≡ 1   ( m o d   n ) a^{\varphi(n)}\equiv1\ (mod\ n) aφ(n)1 (mod n)
其中 φ ( n ) \varphi(n) φ(n) n n n的欧拉函数。

(费马小定理是欧拉定理的一个特例,即 n n n为质数的时候)。

证 明 : 证明:
设所有与 n n n互质的数的集合 S = S= S={ x 1 , x 2 , . . . , x φ ( n ) x_1,x_2,...,x_{\varphi(n)} x1,x2,...,xφ(n)},共 φ ( n ) \varphi(n) φ(n)个。
在设另一个集合 Z = Z= Z={ y 1 , y 2 , . . . , y φ ( n ) y_1,y_2,...,y_{\varphi(n)} y1,y2,...,yφ(n)},其中, y i = a x i   ( m o d   n ) y_i=ax_i\ (mod\ n) yi=axi (mod n)

则有:在模n的意义下,集合 S = Z S=Z S=Z

W h y ? Why? Why?
因为 a a a n n n也是互质的,所以对于每一个 y i y_i yi,都有 y i y_i yi与n互质,且它们都是互不相同的。而与 n n n互质的数就 φ ( n ) \varphi(n) φ(n)个,集合Z正好也有 φ ( n ) \varphi(n) φ(n)个与 n n n互质的数。所以,这 φ ( n ) \varphi(n) φ(n)个数就是那 φ ( n ) \varphi(n) φ(n)个数,集合 S S S与集合 Z Z Z表示的其实都是同一个集合。

所以,有
            y 1 ∗ y 2 ∗ . . . ∗ y φ ( n ) ≡ x 1 ∗ x 2 ∗ . . ∗ x φ ( n )    ( m o d   n ) a φ ( n ) ∗ x 1 ∗ x 2 ∗ . . ∗ x φ ( n ) ≡ x 1 ∗ x 2 ∗ . . ∗ x φ ( n )    ( m o d   n ) \ \ \ \ \ \ \ \ \ \ \ y_1*y_2*...*y_{\varphi(n)} \equiv x_1*x_2*..*x_{\varphi(n)}\ \ (mod\ n)\\ a^{\varphi(n)}*x_1*x_2*..*x_{\varphi(n)} \equiv x_1*x_2*..*x_{\varphi(n)}\ \ (mod\ n)            y1y2...yφ(n)x1x2..xφ(n)  (mod n)aφ(n)x1x2..xφ(n)x1x2..xφ(n)  (mod n)
化简一下有:
a φ ( n ) ≡ 1    ( m o d   n ) a^{\varphi(n)} \equiv 1\ \ (mod\ n) aφ(n)1  (mod n)


中国剩余定理与扩展中国剩余定理

代码展示请看这里

中国剩余定理是指:

解这样一个同余方程组,其中 m 1 , m 2 , . . . , m n m_1,m_2,...,m_n m1,m2,...,mn两两互质
{ x ≡ a 1   ( m o d   m 1 ) x ≡ a 2   ( m o d   m 2 ) . . . . . x ≡ a n   ( m o d   m n ) \begin{cases} x\equiv a_1\ (mod\ m_1)\\ x\equiv a_2\ (mod\ m_2)\\ .....\\ x\equiv a_n\ (mod\ m_n) \end{cases} xa1 (mod m1)xa2 (mod m2).....xan (mod mn)

做法:

M = m 1 ∗ m 2 ∗ . . . ∗ m n M=m_1*m_2*...*m_n M=m1m2...mn
在模 M M M的意义下,方程只有一个解。
再令 M i = M m i M_i=\frac{M}{m_i} Mi=miM,对于每一个 M i M_i Mi,求出 M i − 1 M_i^{-1} Mi1(指 M i M_i Mi m i m_i mi的逆元)。
(如果上面的模数不是两两互质的,会存在有的 M i M_i Mi 的逆元求不出来)

则可以构造出:
x = a 1 M 1 M 1 − 1 + a 2 M 2 M 2 − 1 + . . . + a n M n M n − 1   ( m o d   M ) x=a_1M_1M_1^{-1}+a_2M_2M_2^{-1}+...+a_nM_nM_n^{-1}\ (mod\ M) x=a1M1M11+a2M2M21+...+anMnMn1 (mod M)

简单证明:
检查该解是否满足上面的 n n n个线性同余方程。
对于第一个方程: x ≡ a 1   ( m o d   m 1 ) x\equiv a_1\ (mod\ m_1) xa1 (mod m1)
因为 M 1 − 1 是 M 1 在 模 m 1 下 的 逆 元 M_1^{-1}是M_1在模m_1下的逆元 M11M1m1。所以,在模 m 1 m_1 m1的情况下, M 1 M 1 − 1 = 1 M_1M_1^{-1}=1 M1M11=1。所以解 x x x的第一项 a 1 M 1 M 1 − 1   m o d   m 1 = a 1 a_1M_1M_1^{-1}\ mod\ m_1=a_1 a1M1M11 mod m1=a1,而除此之外,其他的任意一个 M i ( i ! = 1 ) M_i(i!=1) Mi(i!=1) M i M_i Mi都是 m 1 m_1 m1的倍数,它们在模 m 1 m_1 m1的情况下都是等于 0 0 0的。所以整个式子模 m 1 m_1 m1是等于 a 1 a_1 a1的。
同样的,对于其他方程也可以得出类似的结论。
所以,该式子是正确的。


中国剩余定理要求 m 1 , m 2 , . . . , m n m_1,m_2,...,m_n m1,m2,...,mn两两互质,如果不互质怎么办那?这里就要用到扩展中国剩余定理了。

鸽。

扩展中国剩余定理的做法完全不同于上面,它是采用了两两合并的思想。
对于 n n n个线性同余方程组,它每次合并两个,合并 n − 1 n-1 n1次之后就剩下了一个方程,之后在解就十分简单了。

来看一看它是怎么样合并的。

{ x ≡ a 1   ( m o d   m 1 ) x ≡ a 2   ( m o d   m 2 ) . . . . . x ≡ a n   ( m o d   m n ) \begin{cases} x\equiv a_1\ (mod\ m_1)\\ x\equiv a_2\ (mod\ m_2)\\ .....\\ x\equiv a_n\ (mod\ m_n) \end{cases} xa1 (mod m1)xa2 (mod m2).....xan (mod mn)

我们只看前两个方程:
{ x ≡ a 1   ( m o d   m 1 ) x ≡ a 2   ( m o d   m 2 ) \begin{cases} x\equiv a_1\ (mod\ m_1)\\ x\equiv a_2\ (mod\ m_2) \end{cases} {xa1 (mod m1)xa2 (mod m2)

对于这两个方程,改写一下方程的表示,可以这样写:
x = k 1 m 1 + a 1 (1) x=k_1m_1+a_1 \tag1 x=k1m1+a1(1)
x = k 2 m 2 + a 2 (2) x=k_2m_2+a_2 \tag2 x=k2m2+a2(2)

于是有:
k 1 m 1 + a 1 = k 2 m 2 + a 2 k_1m_1+a_1=k_2m_2+a_2 k1m1+a1=k2m2+a2
整理一下:
k 1 m 1 − k 2 m 2 = a 2 − a 1 k_1m_1-k_2m_2=a_2-a_1 k1m1k2m2=a2a1(其中, k 1 k_1 k1 k 2 k_2 k2是未知量)
可以用exgcd先求出一组 k 1 k_1 k1 k 2 k_2 k2的解,记为 k ′ k^{'} k k ′ ′ k^{''} k
这里要判断一下,如果 g c d ( m 1 , m 2 ) gcd(m_1,m_2) gcd(m1,m2)不能整除 ( a 2 − a 1 ) (a_2-a_1) (a2a1)方程是无解的。
那么 k 1 k_1 k1 k 2 k_2 k2的通解形式可以表示为:

{ k 1 = k ′ + k m 2 d k 2 = k ′ ′ + k m 1 d \begin{cases} k_1=k^{'}+k\frac{m_2}{d}\\ k_2=k^{''}+k\frac{m_1}{d} \end{cases} {k1=k+kdm2k2=k+kdm1
d d d g c d ( m 1 , m 2 ) gcd(m_1,m_2) gcd(m1,m2) k k k是任意整数)。

那么仅对于 ( 1 ) (1) (1)方程和 ( 2 ) (2) (2)方程来说, x x x的通解就是:
x = ( k ′ + k m 2 d ) m 1 + a 1 x=(k^{'}+k\frac{m_2}{d})m_1+a_1 x=(k+kdm2)m1+a1,(将 k 1 k_1 k1的通解带入到 ( 1 ) (1) (1)方程中)

化简一下有:

x = m 1 k ′ + k m 1 m 2 d + a 1 x=m_1k^{'}+k\frac{m_1m_2}{d}+a_1 x=m1k+kdm1m2+a1
我们可以发现, m 1 m 2 d \frac{m_1m_2}{d} dm1m2就是 m 1 m_1 m1 m 2 m_2 m2的最小公倍数,记为 [ m 1 , m 2 ] [m_1,m_2] [m1,m2]

于是有

x = k [ m 1 , m 2 ] + m 1 k ′ + a 1 x=k[m_1,m_2]+m_1k^{'}+a_1 x=k[m1,m2]+m1k+a1,其中 [ m 1 , m 2 ] [m_1,m_2] [m1,m2] m 1 k ′ + a 1 m_1k^{'}+a_1 m1k+a1都是定值。分别记为 m = [ m 1 , m 2 ] , a = m 1 k ′ + a 1 m=[m_1,m_2],a=m_1k^{'}+a_1 m=[m1,m2]a=m1k+a1

那么最终可以化为:
x = k m + a (3) x=km+a\tag3 x=km+a(3)

然后观察一下 ( 3 ) (3) (3)式与 ( 1 ) (1) (1)式和 ( 2 ) (2) (2)式,可以惊奇的发现,它们好像是一样的?!

最终,两个方程就合并成了一个方程,我们只用方程 ( 3 ) (3) (3)就可以代表方程 ( 1 ) (1) (1)和方程 ( 2 ) (2) (2)

合并完之后, n n n个方程变成了 n − 1 n-1 n1个方程,然后继续合并,直到方程数为 1 1 1


高斯消元解线性方程组

请看这里。


组合数

请看这里。


简单博弈论

请看这里。


整除分块

请看这里。


莫比乌斯反演

请看这里。

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值