基础数学专题复习

数学归纳法

格式:

  1. 证明当nn的值为初值时的式子成立 (基础(basic)(basic))
  2. 假设当n=kn = k时原式成立,即有 : …
  3. 则当n=k+1n = k + 1时,论证式子恒成立 (归纳(induction)(induction))

e.g. 1

数学归纳法证明等差数列存在an=a1+(n1)da_n = a_1 + (n - 1)d

n=2n = 2时,a2=a1+da_2 = a_1 + d,满足定义式: an=an1+da_n = a_{n - 1} + d

假设n=kn = k时,ak=a1+(k1)da_k = a_1 + (k - 1)d成立,则n=k+1n = k + 1时,ak+1=ak+d=a1+(k1)d+d=a1+kda_{k + 1} = a_k + d = a_1 + (k - 1)d + d = a_1 + kd

所以当n2n \geqslant 2时,an=a1+(n1)da_n = a_1 + (n - 1)d \qquad \blacksquare

e.g. 2

数学归纳法证明平面上的nn条直线最多界定的区域个数Ln=n(n+1)2+1,n0Ln = \dfrac{n(n + 1)}{2} + 1 , n \geqslant 0

存在递推式:

L0=1L_0 = 1

Ln=Ln1+n,n>0L_n = L_{n - 1} + n,n > 0

n=1n = 1时,L1=1+1=L0+1L_1 = 1 + 1 = L_0 + 1,满足递推式

假设n=kn = k时,Lk=k(k+1)2+1L_k = \dfrac{k(k + 1)}{2} + 1成立,则n=k+1n = k + 1时,Lk+1=k(k+1)2+1+(k+1)=(k+1)(k+2)2+1L_{k + 1} = \dfrac{k(k + 1)}{2} + 1 + (k + 1)=\dfrac{(k + 1)(k + 2)}{2} + 1

所以当n1n \geqslant 1时,Ln=n(n+1)2+1,n0Ln = \dfrac{n(n + 1)}{2} + 1 , n \geqslant 0 \qquad \blacksquare

Miller-Rabin

MillerRabinMiller-Rabin 素性检测

前置知识:

  1. 二次探测定理

x21 (mod p)x ^ 2 \equiv 1 \ (mod \ p)x1x \ne 1xp1x \ne p - 1 时, pp 不是质数

proof.proof.

x21 (mod p)x ^ 2 \equiv 1 \ (mod \ p), p(x+1)(x1)p \mid (x + 1)(x - 1)

pp 为素数,则 p(x+1)p \mid (x + 1)p(x1)p \mid (x - 1)

解得 x1 (mod p)x \equiv 1 \ (mod \ p)x1 (mod p)x \equiv -1 \ (mod \ p)

pp 为合数, 则不一定成立, (e.g. 25 mod 8)(e.g. \ 25 \ mod \ 8)

(x+1)(x + 1)(x1)(x - 1) 可能会各有一部分的 pp 的因子

  1. 费马小定理

对于一个素数 pp, 有 ap11 (mod p)a ^ {p - 1} \equiv 1 \ (mod \ p)

结合这两个理论,我们就能够开始我们的 MillerRabinMiller-Rabin 素性检测

可以证明,正确性大概是 14k1 - 4 ^ {-k} , 其中 kk 为二次探测的次数

Pollard-Rho

不妨令 nn 为我们需要质因数分解的数字

先用 MillerRabinMiller-Rabin 算法判断 nn 是不是素数

然后考虑构建一个随机函数 f(x)=x2+cf(x) = x ^ 2 + c , 其中 cc 为随机常数

然后考虑随机函数值的差 ddnn 的最大公约数, 若 (d,n)1(d, n) \ne 1 , 则找到了公约数,(d,n)(d, n) 就是 nn 的一个约数

其中随机函数在 mod nmod \ n 的意义下有可能出现环的情况, 此时用到 floydfloyd 判环

然后考虑倍增地求 (d,n)(d, n) 的值, 节约时间, 但是考虑到判环的时候有可能多次错过,所以不用 floydfloyd 判环而是直接用暴力判环即可

欧拉函数

定义

在学欧拉函数和莫比乌斯函数之前,先不妨设n=p1q1p2q2pkqkn = {p_1}^{q_1} {p_2}^{q_2} \cdots {p_k}^{q_k}

φ(n)\varphi(n)是欧拉函数,表示 [1,n][1, n] 中与 nn 互质的数的个数

φ(n)=n(11p1)(11p2)(11pk)\varphi(n) = n (1 - \dfrac{1}{p_1})(1-\dfrac{1}{p_2})\cdots(1-\dfrac{1}{p_k})

基本公式

dnφ(d)=n\sum \limits_{d \mid n} \varphi(d) = n

Proof.Proof.

dnφ(n)=dnφ(nd)=dni=1nd[gcd(nd,i)=1]=dni=1n[gcd(n,i)=d]=i=1ndn[gcd(n,i)=d]=i=1n1=n\sum\limits_{d \mid n}\varphi(n) =\sum\limits_{d \mid n} \varphi(\dfrac{n}{d}) = \sum\limits_{d \mid n} \sum\limits_{i = 1}^\frac{n}{d}[gcd(\dfrac{n}{d}, i) = 1]=\sum\limits_{d \mid n}\sum\limits_{i = 1}^n[gcd(n, i) = d] = \sum\limits_{i = 1}^n\sum\limits_{d \mid n}[gcd(n, i) = d] = \sum\limits_{i = 1}^n1 = n

莫比乌斯函数

定义

μ(n)\mu(n)是莫比乌斯函数, 定义如下

μ(n)={1n=1(1)kmax(q1,,qk)=10otherwise\mu(n) = \begin{cases}1 & n = 1 \\ (-1)^k & max(q_1, \cdots , q_k) = 1 \\ 0 & otherwise \end{cases}

基本公式

dnμ(d)=[n=1],dnd×μ(nd)=φ(n)\sum\limits_{d \mid n}\mu(d)=[n = 1], \sum\limits_{d \mid n} d \times \mu(\dfrac{n}{d}) = \varphi(n)

φ(n)=i=1n[gcd(i,n)=1]=i=1ndgcd(i,n)μ(d)=dnμ(d)nd=dndμ(nd)\varphi(n) = \sum\limits_{i = 1}^n[gcd(i, n) = 1] = \sum\limits_{i = 1}^n \sum\limits_{d \mid gcd(i, n)} \mu(d) = \sum\limits_{d \mid n}\mu(d)\dfrac{n}{d} = \sum\limits_{d \mid n} d\mu(\dfrac{n}{d})

莫比乌斯反演

F(n)=dnf(d)F(n) = \sum\limits_{d \mid n} f(d), 则 f(n)=dnF(d)μ(nd)f(n) = \sum\limits_{d \mid n}F(d) * \mu(\dfrac{n}{d})

筛法

基本概念

  • 积性函数

对于任意的两个正整数 aba \bot b 满足 f(ab)=f(a)×f(b)f(ab) = f(a) \times f(b)

  • 完全积性函数

对于任意的两个正整数 aa, bb 满足 f(ab)=f(a)×f(b)f(ab) = f(a) \times f(b)

  • 狄利克雷卷积

h(n)=dnf(d)g(nd)h(n) = \sum\limits_{d \mid n} f(d) g(\dfrac{n}{d}), 称 h(n)h(n)f(n)f(n)g(n)g(n) 的狄利克雷卷积

  • 一个定理

两个积性函数的狄利克雷卷积得到的函数仍然是积性函数

线性筛

线性筛,也称为欧拉筛

大家都会,就不整理了吧

杜教筛

计算一类特定积性函数前缀和的算法,例如φ(n)\varphi(n)

i=1ndiφ(d)=d=1nφ(d)×nd=d=1ni=1ndφ(i)\sum\limits_{i = 1}^n \sum\limits_{d \mid i} \varphi(d) = \sum\limits_{d = 1}^n\varphi(d)\times \left\lfloor\dfrac{n}{d}\right\rfloor = \sum\limits{d = 1}^n \sum\limits_{i = 1}^\frac{n}{d}\varphi(i)

i=1nφ(i)=i=1ndiφ(d)d=2ni=1ndφ(i)=n(n+1)2d=2ni=1ndφ(i)\sum_{i=1}^{n} \varphi(i)=\sum_{i=1}^{n} \sum_{d \mid i} \varphi(d)-\sum_{d=2}^{n} \sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor} \varphi(i)=\frac{n(n+1)}{2}-\sum_{d=2}^{n} \sum_{i=1}^{\left\lfloor\frac{n}{d}\right\rfloor} \varphi(i)

所以可以从 nn 递归到 ni\left\lfloor\frac{n}{i}\right\rfloor,众所周知总共只有 n\sqrt{n} 个结果,用记忆化搜索复杂度是 O(n34)O(n^\frac{3}{4}),如果预处理前 n23n^\frac{2}{3} 的结果再记忆化复杂度就变成 O(n23)O(n^{\frac{2}{3}})

e.g.e.g. 给定一个 nn, 求 i=1nμ(in)\sum\limits_{i = 1}^n\mu(in), 其中 1n1091 \leqslant n \leqslant 10^9

Solution:Solution:

F(n,m)=i=1mμ(in)F(n, m) = \sum\limits_{i = 1} ^ m \mu(i n), 则有:

F(n,m)=i=1mμ(in)=i=1mμ(i)μ(n)[gcd(i,n)=1]=μ(n)i=1mμ(i)dgcd(i,n)μ(d)F(n, m) = \sum\limits_{i = 1} ^ m \mu(i n) = \sum\limits_{i = 1}^m \mu(i) \mu(n) [gcd(i, n) = 1] = \mu(n) \sum\limits_{i = 1} ^ m\mu(i)\sum\limits_{d \mid gcd(i, n)} \mu(d)

F(n,m)=μ(n)dnμ(d)i=1mdμ(id)=μ(n)dnμ(d)F(d,md)F(n, m) = \mu(n) \sum\limits_{d \mid n}\mu(d) \sum\limits_{i = 1}^{\left\lfloor\frac{m}{d}\right\rfloor}\mu(id) = \mu(n) \sum\limits_{d \mid n}\mu(d)F(d, {\left\lfloor\dfrac{m}{d}\right\rfloor})

n=1n = 1时用杜教筛求出,递归地去做, 复杂度大概是 O(n23)O(n ^ {\frac{2}{3}})

欧几里得算法

gcd(a,b)=gcd(b,a mod b)gcd(a, b) = gcd(b, a \ mod \ b)

lcm(a,b)=a×bgcd(a,b)lcm(a, b) = \dfrac{a \times b}{gcd(a, b)}

裴蜀定理

给定不全为 00 的整数 a,ba, b , 存在整数 x,yx, y 使得 ax+by=gcd(a,b)ax + by = gcd(a, b)

e.g. CF510D Fox And Jumpinge.g. \ CF510D \ Fox \ And \ Jumping

给出 nn 张卡片,分别有 lil_icic_i

在一条无限长的纸带上,你可以选择花 cic_i 的钱来购买卡片 ii,从此以后可以向左或向右跳 lil_i 个单位。问你至少花多少元钱才能够跳到纸带上全部位置。若不行,输出 1-1

Solution.Solution.

考虑整张纸带都能走, 那么我们就要使选定的卡片通过互相加减来变成 11, 这样我们就能够走完整张纸带

依据裴蜀定理即得: ax+by=gcd(a,b)ax + by = gcd(a, b) , 当 aba \bot b 时有 gcd(a,b)=1gcd(a, b) = 1

所以我们只要用 堆优化dijkstra 求解答案即可, 每次枚举 l1,l2,,lnl_1, l_2, \cdots , l_n 来转移到 gcd(dis[u],li)gcd(dis[u], l_i) 即可

需要注意的是要用 unordered_map 来维护 dis[] 数组

扩展欧几里得算法

常用来求 ax+by=gcd(a,b)ax + by = gcd(a, b) 的一组可行解

ax1+by1=gcd(a,b)ax_1 + by_1 = gcd(a, b)

bx2+(a mod b)y2=gcd(b,a mod b)bx_2 + (a \ mod \ b) y_2 = gcd(b, a \ mod \ b)

gcd(a,b)=gcd(b,a mod b),ax1+by1=bx2+(a mod b)y2\because gcd(a, b) = gcd(b, a \ mod \ b), \therefore ax_1 + by_1 = bx_2 + (a \ mod \ b) y_2

a mod b=aab×b,ax1+by1=bx2+(aab×b)y2\because a \ mod \ b = a - {\left\lfloor\dfrac{a}{b}\right\rfloor} \times b, ax_1 + by_1 = bx_2 + (a - {\left\lfloor\dfrac{a}{b}\right\rfloor} \times b) y_2

展开移项可得:

x1=y2,y1=x2aby2x_1 = y_2, y_1 = x_2 - {\left\lfloor\dfrac{a}{b}\right\rfloor}y_2

终止条件为 x=1,y=0x = 1, y = 0, 可以递归求解

类欧几里得算法

使用一个类似于辗转相除法的方法递归地做函数求和的过程

e.g.e.g. 给定 a,b,c,na, b, c, n 求解i=0nai+bc\sum\limits_{i = 0}^n{\left\lfloor\dfrac{ai + b}{c}\right\rfloor}, 其中 n<=109n <= 10^9

Solution.Solution.

核心思想是分类讨论然后将情况分开计算

定义 F(a,b,c,n)=i=0nai+bcF(a, b, c, n) = \sum\limits_{i = 0}^n{\left\lfloor\dfrac{ai + b}{c}\right\rfloor}

ac,bca \geqslant c, b \geqslant c时,有:

F(a,b,c,n)=i=0nai+bc=i=0n(ac×c+a mod c)i+(bc×c+b mod c)c=n(n+1)2ac+(n+1)bc+f(a mod c,b mod c,c,n)F(a, b, c, n) = \sum\limits_{i = 0}^n{\left\lfloor\dfrac{ai + b}{c}\right\rfloor} = \sum\limits_{i = 0}^n{\left\lfloor\dfrac{({\left\lfloor\frac{a}{c}\right\rfloor} \times c + a \ mod \ c)i + ({\left\lfloor\frac{b}{c}\right\rfloor} \times c + b \ mod \ c)}{c}\right\rfloor} = \dfrac{n(n + 1)}{2} {\left\lfloor\dfrac{a}{c}\right\rfloor} + (n + 1){\left\lfloor\dfrac{b}{c}\right\rfloor} + f(a \ mod \ c, b \ mod \ c, c, n)

中国剩余定理

  1. 计算所有模数的积 nn ;

  2. 对于第 ii 个方程:

  • 计算 mi=nnim_{i}=\frac{n}{n_{i}}

  • 计算 mim_{i} 在模 nin_{i} 意义下的 逆元 mi1m_{i}^{-1}

  • 计算 ci=mimi1c_{i}=m_{i} m_{i}^{-1} (不要对 nin_{i} 取模)

  1. 方程组的唯一解为: a=i=1kaici(mod n)\quad a=\sum\limits_{i=1}^{k} a_{i} c_{i} \quad(\bmod \ n)

ProofProof

找们需要证明上面算法计算所得的 aa 对于任意 i=1,2,,ki=1,2, \cdots, k 满足 aai(mod ni)a \equiv a_{i}\left(\bmod \ n_{i}\right) \circiji \neq j 时,有 mj0(mod ni)m_{j} \equiv 0\left(\bmod \ n_{i}\right), 故 cjmj0(mod ni)c_{j} \equiv m_{j} \equiv 0\left(\bmod \ n_{i}\right) \cdot 又有
cimi(mi1mod ni)1(mod ni)c_{i} \equiv m_{i}\left(m_{i}^{-1} \bmod \ n_{i}\right) \equiv 1\left(\bmod \ n_{i}\right), 所以我们有 :

aj=1kajcj(mod ni)aici(mod ni)aimi(mi1mod ni)(mod ni)ai(mod ni)\begin{aligned} a & \equiv \sum_{j=1}^{k} a_{j} c_{j} & &\left(\bmod \ n_{i}\right) \\ & \equiv a_{i} c_{i} & &\left(\bmod \ n_{i}\right) \\ & \equiv a_{i} m_{i}\left(m_{i}^{-1} \bmod \ n_{i}\right) & &\left(\bmod \ n_{i}\right) \\ & \equiv a_{i} & &\left(\bmod \ n_{i}\right) \end{aligned}

即对于任意 i=1,2,,ki=1,2, \cdots, k, 上面算法得到的 aa 总是满足 aai(modni)a \equiv a_{i}\left(\bmod n_{i}\right), 即证明了解 同余方程组的算法的正确性。
因为我们没有对输入的 aia_{i} 作特殊限制,所以任何一组输人 {ai}\left\{a_{i}\right\} 都对应一个解 aa
另外,若 xyx \neq y, 则总存在 ii 使得 xxyy 在模 nin_{i} 下不同余。
故系数列表 {ai}\left\{a_{i}\right\} 与解 aa 之间是一一映射关系,方程组总是有唯一解。

扩展中国剩余定理

考虑两个同余方程的情况

{xc1 (mod m1)xc2 (mod m2)xcr (mod mr)\begin{cases}x \equiv c_1 \ (mod \ m_1) \\ x \equiv c_2 \ (mod\ m_2) \\ \cdots \\ x \equiv c_r \ (mod \ m_r) \end{cases}

其中 m1,m2,,mrm_1, m_2, \cdots, m_r 存在 mk1m_{k1}mk2m_{k2} 不互质

因为CRTCRT要求模数互质,所以这个问题我们并不能用 CRTCRT 来做

从简单的入手,我们考虑两个方程的情况

{xc1 (mod m1)xc2 (mod m2)\begin{cases}x \equiv c_1 \ (mod \ m_1) \\ x \equiv c_2 \ (mod\ m_2) \\ \end{cases}

可以转化为:

x=c1+m1k1x = c_1 + m_1 k_1

x=c2+m2k2x = c_2 + m_2 k_2

所以 c1+m1k1=c2+m2k2c_1 + m_1 k_1 = c_2 + m_2 k_2

移项得 c2c1=m1k1m2k2c_2 - c_1 = m_1 k_1 - m_2 k_2

不妨用 (m1,m2)(m_1, m_2) 来表示 m1,m2m_1, m_2 的最大公约数

由裴蜀定理得 (m1,m2)(c2c1)(m_1, m_2) \mid (c_2 - c_1), 否则方程无解

方程两边移项后同时除上 (m1,m2)(m_1, m_2)

m1(m1,m2)k1=c2c1(m1,m2)+m2(m1,m2)k2\dfrac{m_1}{(m_1, m_2)}k_1 = \dfrac{c_2 - c_1}{(m_1, m_2)} + \dfrac{m_2}{(m_1, m_2)}k_2

m1(m1,m2)k1c2c1(m1,m2) (mod m2(m1,m2))\dfrac{m_1}{(m_1, m_2)}k_1 \equiv \dfrac{c_2 - c_1}{(m_1, m_2)} \ (mod \ \dfrac{m_2}{(m_1, m_2)})

inv(a,b)inv(a, b) 表示 aa 在模 bb 意义下的逆元

k1inv(m1(m1,m2),m2(m1,m2))×c2c1(m1,m2) (mod m2(m1,m2))k_1 \equiv inv(\dfrac{m_1}{(m_1, m_2)}, \dfrac{m_2}{(m_1, m_2)}) \times \dfrac{c_2 - c_1}{(m_1, m_2)} \ (mod \ \dfrac{m_2}{(m_1, m_2)})

展开得 : k1=inv(m1(m1,m2),m2(m1,m2))×c2c1(m1,m2)+y×m2(m1,m2)k_1 = inv(\dfrac{m_1}{(m_1, m_2)}, \dfrac{m_2}{(m_1, m_2)}) \times \dfrac{c_2 - c_1}{(m_1, m_2)} + y \times \dfrac{m_2}{(m_1, m_2)}

又因为 x=c1+m1k1x = c_1 + m_1 k_1

所以 x=inv(m1(m1,m2),m2(m1,m2))m1(m1,m2)(c2c1)+m1m2(m1,m2)y+c1x = inv(\dfrac{m_1}{(m_1, m_2)}, \dfrac{m_2}{(m_1, m_2)}) \dfrac{m_1}{(m_1, m_2)}(c_2 - c_1) + \dfrac{m_1 m_2}{(m_1, m_2)}y + c_1

xinv(m1(m1,m2),m2(m1,m2))m1(m1,m2)(c2c1)+c1 (mod m1m2(m1,m2))x \equiv inv(\dfrac{m_1}{(m_1, m_2)}, \dfrac{m_2}{(m_1, m_2)}) \dfrac{m_1}{(m_1, m_2)}(c_2 - c_1) + c_1 \ (mod \ \dfrac{m_1 m_2}{(m_1, m_2)})

这个式子可以理解为 xc (mod M)x \equiv c \ (mod \ M)

其中 c=((inv(m1(m1,m2),m2(m1,m2))(c2c1)(m1,m2)) mod m2(m1,m2))×m1+c1c = ((inv(\dfrac{m_1}{(m_1, m_2)}, \dfrac{m_2}{(m_1, m_2)}) \dfrac{(c_2 - c_1)}{(m_1, m_2)}) \ mod \ \dfrac{m_2}{(m_1, m_2)}) \times m_1 + c_1

M=m1m2(m1,m2)M = \dfrac{m_1 m_2}{(m_1, m_2)}

扩展到多个方程的话就拿现有已考虑过的方程一个一个与未考虑的方程进行计算

费马小定理

对于gcd(a,p)=1gcd(a, p) = 1, 且pp为质数

apa (mod p)a ^ p \equiv a \ (mod \ p)

Proof 1.Proof \ 1.

引理1. 若n(ab),x>0,gcd(x,n)=1n \nmid (a - b) , x > 0, gcd(x, n) = 1, 则nx(ab)n \nmid x(a - b)

证明: 该结论显然

引理2. 对于集合A={1,p1}A = \{1, \cdots {p - 1}\}, 则集合 {kA,gcd(a,p)=1,k×a mod p}\{ k \in A, gcd(a, p) = 1, k \times a \ mod \ p \}AA 等价

证明: 对于互异的 kk 来说, k×ak \times amod pmod \ p 意义下互异, 由引理1可得 p(k1k2),a>0,gcd(a,p)=1pa×(k1k2)\because p \nmid (k1 - k2),a > 0, gcd(a, p) = 1 \therefore p \nmid a \times (k1 - k2)

由引理2可得 i=1p1(i×a)i=1p1i×ap1,i=1p1ii=1p1i×ap1 (mod p)\because \prod \limits_{i = 1}^{p - 1}(i \times a) \equiv \prod \limits_{i = 1}^{p - 1}i \times a ^ {p - 1}, \prod \limits_{i = 1}^{p - 1}i \equiv \prod \limits_{i = 1}^{p - 1}i \times a ^ {p - 1} \ (mod \ p)

ap11 (mod p)\therefore a^{p - 1} \equiv 1 \ (mod \ p)

Proof 2.Proof \ 2.

引理1: 对于二项式系数(pn)\dbinom{p}{n}, 当pp为质数且n=1p1,p(pn)n = 1 \cdots {p - 1}, p \mid \dbinom{p}{n}

证明: 当n=1p1n = 1 \cdots {p - 1} 时, (pn)=p!n!(np)!\because \dbinom{p}{n} = \dfrac{p!}{n!(n-p)!}pp 最后不会被分母消去, n=1p1,p(pn)\therefore n = 1 \cdots {p - 1}, p \mid \dbinom{p}{n}

考虑 (b+1)p(b + 1) ^ p 展开

(b+1)p=(pp)bp+(pp1)bp1++(p1)b1+(p0)b0(pp)bp+(p0)b0(mod p)bp+1(mod p)(b1)p+1+1(mod p)(b2)p+1+1+1(mod p)1+1++1+1b+1(mod p)b+1(mod p)\begin{aligned} (b + 1) ^ p & = \dbinom{p}{p} b ^ p + \dbinom{p}{p - 1} b ^ {p - 1} + \cdots + \dbinom{p}{1} b ^ 1 + \dbinom{p}{0} b ^ 0 \\ & \equiv \dbinom{p}{p} b ^ p + \dbinom{p}{0} b ^ 0 & (mod \ p) \\ & \equiv b ^ p + 1 &(mod \ p) \\ & \equiv (b - 1) ^ p + 1 + 1 &(mod \ p)\\ & \equiv (b - 2) ^ p + 1 + 1 + 1 &(mod \ p) \\ & \cdots \\ & \equiv \begin{matrix}\underbrace{1 + 1 + \cdots + 1 + 1}\\b + 1\end{matrix} & (mod \ p) \\ & \equiv b + 1 & (mod \ p) \end{aligned}

b=a1b = a - 1, 则有 apa (mod p)a ^ p \equiv a \ (mod \ p)

欧拉定理

对于apa \bot p

aφ(p)1 (mod p)a ^ {\varphi(p)} \equiv 1 \ (mod \ p)

扩展欧拉定理

ab{ab mod φ(p)gcd(a,p)=1abgcd(a,p)1,b<φ(p)(mod p)aφ(p)+b mod φ(p)gcd(a,p)1,bφ(p)a^b \equiv \begin{cases}a ^ {b \ mod \ \varphi(p)}&gcd(a, p) = 1 \\ a ^ b & gcd(a, p) \ne 1, b < \varphi(p) & (mod \ p) \\ a ^ {\varphi(p) + b \ mod \ \varphi(p)} & gcd(a, p) \ne 1, b \geqslant \varphi(p) \end{cases}

威尔逊定理

(p1)!1 (mod p)P is a prime.(p - 1)! \equiv -1 \ (mod \ p) \Longleftrightarrow P \ is \ a \ prime.

卢卡斯定理

(nm)%p=(n%pm%p)(npmp)%p\dbinom{n}{m} \% p = \dbinom{n \% p}{m \% p} \dbinom{ \left\lfloor\dfrac{n}{p}\right\rfloor }{ \left\lfloor\dfrac{m}{p}\right\rfloor } \% p

扩展卢卡斯定理

(nm) mod p\dbinom{n}{m} \ mod \ p 的值

不妨令 x=(nm)x = \dbinom{n}{m}

我们可以先对模数进行质因数分解:

p=p1k1p2k2p3k3pikip = p_1^{k_1}p_2^{k_2}p_3^{k_3} \cdots p_i^{k_i}

有同余方程:

{xa1(mod p1k1)xa2(mod p2k2)xai(mod piki)\begin{cases}x \equiv a_1 & (mod \ p_1^{k_1}) \\ x \equiv a_2 & (mod \ p_2^{k_2}) \\ \cdots \\ x \equiv a_i & (mod \ p_i^{k_i}) \end{cases}

我们可以用 CRTCRT 将上述同余方程合并起来, 于是我们考虑怎么求 aia_i 的值

考虑 n! mod pikin! \ mod \ p_i^{k_i} 的求法:

可以观察到有 npi!×pi×1×2××(pi1)×(pi+1)×n\left\lfloor\dfrac{n}{p_i}\right\rfloor! \times p_i \times 1 \times 2 \times \cdots \times (p_i - 1) \times (p_i + 1) \times \cdots n

然后我们可以可以递归处理这个 npi!\left\lfloor\dfrac{n}{p_i}\right\rfloor! , 至于 pip_i 的话我们考虑提前把次数预处理出来,然后后面再乘即可

除此之外我们可以发现: 在 mod pikimod \ p_i^{k_i} 的意义下, i=1piki1ii=piki+12piki1i (mod piki)\prod\limits_{i = 1}^{p_i^{k_i} - 1} i \equiv \prod\limits_{i = p_i^{k_i} + 1}^{2p_i^{k_i} - 1} i \ (mod \ p_i^{k_i})

即只需要预处理一下 i=1piki1i\prod\limits_{i = 1}^{p_i^{k_i} - 1} i, 然后快速幂一下就行了

组合数学

关于这个我觉得能够讲一年

基本定义

规定 0!=10! = 1

C(n,r)=P(n,r)r!=n!(nr)!r!C(n, r) = \dfrac{P(n, r)}{r!} = \dfrac{n!}{(n - r)! r!}

P(n,r)=n!(nr)!P(n, r) = \dfrac{n!}{(n - r)!}

Q(n,r)=P(n,r)r=n!r(nr)!Q(n, r) = \dfrac{P(n, r)}{r} = \dfrac{n!}{r(n - r)!}

基本定理

定理1 - 1 : 过nn个有标志顶点的树的数目为nn2n ^ {n - 2} (CayleyCayley定理)

定理1 - 2 : 在 nn 个不同元素中取 rr 个作允许重复的组合, 其组合数为 (n+r1r)\dbinom{n + r - 1}{r}

定理1 - 3 : 从 A=1,2,,nA = {1, 2, \cdots , n} 中取 rr 个作不相邻的组合, 其组合数为 (nr+1r)\dbinom{n - r + 1}{r}

定理1 - 4 : 线性方程 x1+x2++xn=bx_1 + x_2 + \cdots + x_n = b 的非负整数解个数为 (n+b1b)\dbinom{n + b - 1}{b}

组合数奇偶性

(nk) mod 2{1n&k=k0otherwise\dbinom{n}{k} \ mod \ 2 \equiv \begin{cases} 1 & {n \& k = k} \\ 0 & otherwise \end{cases}

二项式定理

(x+y)n=i=0n(ni)xiyni(x + y) ^ n = \sum\limits_{i = 0}^n\dbinom{n}{i} x^i y ^ {n - i}

Pascal公式

(nm)=(n1m1)+(n1m)\dbinom{n}{m} = \dbinom{n - 1}{m - 1} + \dbinom{n - 1}{m}

图论中的组合数学公式

i=uv(ik)=(v+1k+1)(uk+1)\sum\limits_{i = u}^v \dbinom{i}{k} = \dbinom{v + 1}{k + 1} - \dbinom{u}{k + 1}

简单组合数学公式

  1. (m+nm)=(m+nn)    (nr)=(nnr)\dbinom{m + n}{m} = \dbinom{m + n}{n} \iff \dbinom{n}{r} = \dbinom{n}{n - r}

  2. (nr)=(n1r)+(n1r1)\dbinom{n}{r} = \dbinom{n - 1}{r} + \dbinom{n - 1}{r - 1}

  3. (n+r+1r)=(n+rr)+(n+r1r1)++(n0)\dbinom{n + r + 1}{r} = \dbinom{n + r}{r} + \dbinom{n + r - 1}{r - 1} + \cdots + \dbinom{n}{0}

  4. (nl)(lr)=(nr)(nrlr),lr\dbinom{n}{l} \dbinom{l}{r} = \dbinom{n}{r} \dbinom{n - r}{l - r}, l \geqslant r

  5. (x+y)m=(m0)xm+(m1)xm1y++(mm)ym(x + y) ^ m = \dbinom{m}{0}x^m + \dbinom{m}{1}x^{m - 1}y + \cdots + \dbinom{m}{m}y^m

  6. (m0)+(m1)++(mm)=2m\dbinom{m}{0} + \dbinom{m}{1} + \cdots + \dbinom{m}{m} = 2^m

  7. (n0)(n1)+(n2)±(nn)=0\dbinom{n}{0} - \dbinom{n}{1} + \dbinom{n}{2} -\cdots \pm \dbinom{n}{n} = 0

  8. (m+nr)=(m0)(nr)+(m1)(nr1)++(mr)(n0)\dbinom{m + n}{r} = \dbinom{m}{0} \dbinom{n}{r} + \dbinom{m}{1} \dbinom{n}{r - 1} + \cdots + \dbinom{m}{r} \dbinom{n}{0}

  9. (m+nm)=(m0)(n0)+(m1)(n1)++(mm)(nm),mn\dbinom{m + n}{m} = \dbinom{m}{0} \dbinom{n}{0} + \dbinom{m}{1} \dbinom{n}{1} + \cdots + \dbinom{m}{m} \dbinom{n}{m}, m \leqslant n

  10. (rr)+(r+1r)++(nr)=(n+1r+1)\dbinom{r}{r} + \dbinom{r + 1}{r} + \cdots + \dbinom{n}{r} = \dbinom{n + 1}{r + 1}

  11. (2nn)=(n0)2+(n1)2++(nn)2\dbinom{2n}{n} = \dbinom{n}{0} ^ 2 + \dbinom{n}{1} ^ 2 + \cdots + \dbinom{n}{n} ^ 2

  12. Prn=nPr1n1=(nr+1)Pr1n=nnrPrn1P^n_r = n P^{n - 1}_{r - 1} = (n - r + 1) P^n_{r - 1} = \dfrac{n}{n - r}P^{n - 1}_r

  13. Prn+1=Prn+rPr1n=r!+r(Pr1n+Pr1n1++Pr1r)P^{n + 1}_r = P^n_r + rP^n_{r - 1} = r! + r(P^n_{r - 1} + P^{n - 1}_{r - 1} + \cdots + P^r_{r - 1})

  14. k=1nk(nk)=n2n1\sum\limits_{k = 1}^nk\dbinom{n}{k} = n 2 ^ {n - 1}

  15. (n+12)+2(n+13)=k=1nk2\dbinom{n + 1}{2} + 2\dbinom{n + 1}{3} = \sum\limits_{k = 1}^n k ^ 2

  16. (nr)=nr(n1r1),1rn\dbinom{n}{r} = \dfrac{n}{r} \dbinom{n - 1}{r - 1}, 1 \leqslant r \leqslant n

  17. (nr)=nr+1r(nr1),1rn\dbinom{n}{r} = \dfrac{n - r + 1}{r} \dbinom{n}{r - 1}, 1 \leqslant r \leqslant n

  18. (nr)=nnr(n1r),0rn\dbinom{n}{r} = \dfrac{n}{n - r} \dbinom{n - 1}{r}, 0 \leqslant r \leqslant n

  19. (m0)(mn)+(m1)(m1n1)++(mn)(mn0)=2n(mn)\dbinom{m}{0}\dbinom{m}{n} + \dbinom{m}{1} \dbinom{m - 1}{n - 1} + \cdots + \dbinom{m}{n} \dbinom{m - n}{0} = 2 ^ n \dbinom{m}{n}

  20. (n0)2n+(n2)2n2++(nq)2n1=3n+12,q=2[n2]\dbinom{n}{0} 2 ^ n + \dbinom{n}{2} 2 ^ {n - 2} + \cdots + \dbinom{n}{q} 2 ^ {n - 1} = \dfrac{3 ^ n + 1}{2}, q = 2[\dfrac{n}{2}]

原根和阶

ama \bot m , 使 al1 (mod m)a^l \equiv 1 \ (mod \ m) 成立的最小的 ll , 称为 aa 关于模 mm 的阶, 记为 ordmaord_ma

原根

gmg \bot m ,若 ordmg=φ(m)ord_mg = \varphi(m), 则称 ggmm 的一原根

也可表述为 : ggmm 的原根当且仅当集合 {g,g2,,gφ(m)}\{ g, g^2, \cdots , g^{\varphi(m)}\} 构成模 mm 的一个既约剩余系

BSGS

可用于求解 apa \bot p 时,满足 axb (mod p)a ^ x \equiv b \ (mod \ p) 的最小的 xx

我们不妨令 x=A×pBx = A \times \left\lceil\sqrt{p}\right\rceil - B

则有 aA×pBb (mod p)a ^ {A \times \left\lceil\sqrt{p}\right\rceil - B} \equiv b \ (mod \ p)

移项得 aA×pb×aB (mod p)a ^ {A \times \left\lceil\sqrt{p}\right\rceil} \equiv b \times a ^ B \ (mod \ p)

其中 1A,Bp1 \le A, B \le \sqrt{p}, 于是我们可以枚举 BB 的取值,然后把关于模 pp 意义下的余数用 map 存下来 ( 或者用Hash_Table更好 )

然后枚举 AA , 计算 aA×pa ^ {A \times \left\lceil\sqrt{p}\right\rceil} 在模 pp 的意义下的余数, 然后再看 map 中有没有对应的 BB, 如果存在,输出 A×pBA \times \left\lceil\sqrt{p}\right\rceil - B 即可

当然该方法能够求解所有满足条件的 xx

EXBSGS

考虑 gcd(a,p)>1gcd(a, p) > 1 的情况, 此时不满足 bsgsbsgs 中的互质条件, 考虑怎样转换题目

我们考虑将原来的式子进行转换

axb (mod p)ax+p×k=ba ^ x \equiv b \ (mod \ p) \Rightarrow a ^ x + p \times k = b

不妨令 gcd(a,p)=d0gcd(a, p) = d_0 , 则有 axd0+kd0×p=bd0\dfrac{a ^ x}{d_0} + \dfrac{k}{d_0} \times p = \dfrac{b}{d_0}

然后我们可以继续考虑 di=gcd(bi=0i1di,a)d_i = gcd(\frac{b}{\prod\limits_{i = 0}^{i - 1}d_{i}}, a)

不妨令 D=i=0idiD = \prod\limits_{i = 0}^{i}d_i

最后将式子转化成了 axD+kD×p=bD\dfrac{a ^ x}{D} + \dfrac{k}{D} \times p = \dfrac{b}{D}

axDbD (modpD)\dfrac{a ^ x}{D} \equiv \dfrac{b}{D} \ (mod \dfrac{p}{D} )

DpD \nmid p , 则该方程无解

此时即可把这个问题转化为 BSGSBSGS 求解

一些概念及定义

完全剩余系

{0,1,,p2,p1}\{ 0, 1, \cdots, p - 2, p - 1 \} 构成的集合称为模 pp 的一个完全剩余系

既约剩余系

pp 的一个既约剩余系指的是完全剩余系中与 pp 互质的元素组成的集合