数学总结

离开OI这么久了,突然捡起来还有点不适应呢

毕竟假期讲课讲的是数学,那就从这里开始复习吧

 

1.线性筛素数

 

如何做到线性呢?就是确保每个合数仅会被其最小的质因子筛去

 

2.欧拉函数 $\varphi(n)$

 

$\varphi(n)=n-1$当且仅当$p$为质数

$\varphi(n*m)=\varphi(n)*\varphi(m)$当$gcd(n,m)=1$时,即$\varphi$为积性函数

$\varphi(n)=n*\prod\frac{p-1}{p}$其中$p$为$n$的质因数

$\varphi(n)$为偶数,特例是$\varphi(2)=1$

 

欧拉函数也可以使用线性筛来线性处理,利用的就是积性函数的性质

只需要在筛质数的基础上稍稍改动即可

 

3.Lucas定理

 

当$p$是质数时,满足

$C^{n}_{m} \ \equiv \ C^{n/p}_{m/p}*C^{n\%p}_{m\%p}\quad mod\ p$

复杂度是$O(log(n))$的

正确性证明:

由二项式定理可得 $(1+x)^n=\sum_{i=0}^{i<=n}\ C^{i}_{n}\ x^{i}\ \equiv \ (1+x^n)\quad mod\ p$

那么 $(x+1)^{m} = (x+1)^ {\lfloor\frac{m}{p}\rfloor*p} * (x+1)^{m\%p} $

即$(x+1)^{m}=(1+x^{p})^{\lfloor\frac{m}{p}\rfloor}*(x+1)^{m\%p}$

由二项式定理展开得$\sum_{i=0}^{i<=m}\ C^{i}_{m}*x^{i}=(\sum_{i=0}^{i<=\lfloor\frac{m}{p}\rfloor}\quad\  C^{\ i}_{\lfloor\frac{m}{p}\rfloor}*x^{i*p})*(\sum_{i=0}^{i<=m\%p}\ C^{i}_{m\%p}*x^{i})$

若左侧取$i=k$时,观察$C_{m}^{k}$的系数即可得到

$C_{m}^{k}=C_{m/p}^{k/p}*C_{m\%p}^{k\%p}$

 

4.求逆元的方法

 

4.1欧拉定理

当$gcd(a,p)=1$时,$a^{\varphi(p)} \ \equiv1 \ mod\  p$

费马小定理就是$p$为质数的特殊情况

 

4.2扩展欧几里得

扩展欧几里得本身是用来求解二元一次不定方程的一组整数解的算法

比如我们要求解$a*x+b*y=gcd(a,b)$的一组整数解

构造方程$b*x'+(a\%b)*y=gcd(b,a\%b)=gcd(a,b)$

将$gcd$打开得到 $a*y'+b*(x'-\lfloor\frac{a}{b}\rfloor*y')=gcd(a,b)$ 

如果我们得到$x'$和$y'$那么就可以通过变换得到$x$和$y$

$x=y',y=x'- \lfloor \frac{a}{b} \rfloor *y'$

当$b=0$时,$x=1,y=0$就是一组方程的合法解

那么如果我们求解方程$a*x+b*p=1$

得到的$x$即是$inv_a$

 

4.3线性筛求逆元

 如果$p$为质数

我们定义$b=p/a,c=p\%a$

则$(c+b*a)\equiv0 \ mod\ p$

即$c\equiv-(b*a)\ mod\ p$

俩边同时除$a*c$

得$inv_{a}\equiv -(b*inv_{c})\ mod\ p$

即$inv_{a}=(p-p/a)*inv_{p\%a}\ \%p$

同样可以利用线性筛进行预处理

5.中国剩余定理

 

中国剩余定理是一种通过构造得方法解同余方程组得,CRT要求同余方程组得模数俩俩互质。

例如我们要求一个同余方程组$x\equiv a_{i}\ mod \ m_{i}$

我们令$M_{i}=\prod_{j\neq i}m_{i}$,满足$gcd(M_{i},m_{i})=1$

令$e_{i}=M_{i}*inv_{M_{i}}$(相对于$m_{i}的逆元$)

满足$j\neq i\quad e_{i}\equiv 0 mod \ m_{j}$

且$e_{i}\equiv 1 mod \ m_{i}$

所以$\sum e_{i}*a_{i}$即为构造的一个解

易证,满足条件的最小正整数解有且只有一个,对$\prod m_{i}$取模即可

 

6.BSGS

 

6.1BSGS

 

用于求解高次同余方程$A^{x}\ \equiv B \ mod \ C$,其中$C$是质数

思想是分块,由于$A^{C-1}\ \equiv 1 \mod \ C$,易知若有解一定存在不超过$C-1$的整数解

我们将$C$分成$n*m$,那么若有解则一定存在$A^{i*m-j}\ \equiv B \mod \ C$

其中$i\in[1,n],j\in[0,m-1]$

等式俩侧同时除以$A^{j}$得$A^{i*m}\ \equiv B*A^{j} \mod \ C$

这样右侧用哈希或者map预处理一下,左侧也是线性代价,即$O(n+m)$

当$n=m= \sqrt C$时时间复杂度最小

 

6.2EXBSGS

 

当$gcd(A,C)\neq1$时,俩侧同时乘或除$A$可能没有意义

所以我们先不断地在提取若干个$A$,俩侧同时约掉$gcd(A,C)$

得到$\frac{A^{p}}{\prod_{i=1}^{i<=p}\quad gcd(A,C_{i})}*A^{x-p}\ \equiv
B_{p+1}=\frac{B}{\prod_{i=1}^{i<=p}\quad gcd(A,C_{i})}\ mod \  C_{p+1}$

不妨设为$D*A^{x-p}\equiv B_{p+1}\ mod \  C_{p+1}$

由于$gcd(D,C_{p+1})=1$,存在$D$的逆元

得到$A^{x-p} \equiv B_{p+1}*inv_{D}\ mod \  C_{p+1}$

再次套用BSGS即可

 

7.burnside定理

 

对于一个置换$f$,如果一个方案$s$经过置换后不变,则称$s$为$f$不动点,将$f$的不动点数目记为$C(f)$

则可证明本质不同的方案数(即等价类数目)为$C(f)$的平均值。

 

8.polya定理

 

不难发现,如果存在多种颜色去染色,我们很难确定所有染色方案是否是不动点

polya:一个置换不动点的个数等于该置换中循环的个数的颜色次幂

 

9.线性基

 

线性基是用于解决一个数集的异或问题的算法。

将一个数的二进制写法看作一个空间向量,一般地数据范围不会超过$2^{64}$,所以可以看作是64维的空间向量。

我们的最终目标是构出一个由至多64个线性无关的向量组成的基底,来尽可能地去表示空间中的任何向量。

每当一个新的数加入数集时,尝试由高到低位不断异或,如果发现某一维度上尚还无向量变让当前的向量加入,这样就保证了最终构造出的基底,第$k$个向量的第一个为1的维度是第$k$维。

那么判断一个数$x$能否被xor出,只需要从高到低如果$x$对应位置位$1$则异或上这一维度的向量,依此类推,看最终能否构造出$x$。若不能则一定不存在可行的构造方案。因为若存在方案,那么一定满足一下俩个条件:

1.存在一个维度基底对应的向量为空。(若基底对应的所有维度都非空则一定可以构造出任意数)

2.存在一个数与基底中的向量异或后不为0,即线性无关。

但是明显第一个条件的充要条件是线性相关,故不存在。

线性基的缺点是无法还原出原数集,无法解决诸如最少需要几个数将$x$异或出来这样的问题。

 

10.莫比乌斯反演

 

莫比乌斯反演主要利用到了莫比乌斯函数$\mu$

$\mu(x)$的定义是:

1.$\mu(1)=1$

2.若x能表示为$k$个互异素数的乘积,那么$\mu(x)=(-1)^{k}$

3.其他情况下$\mu(x)=0$

 

如果存在俩个定义在正数域上的函数满足

$F(n)=\sum_{d|n}f(d)$

那么由莫比乌斯反演即可得到

$f(n)=\sum_{d|n}\mu(d)F(\lfloor\frac{n}{d}\rfloor)$

 

要证明这个式子首先要证明

对于任意的$x$,$\sum_{d|x}\mu(d)=[x==1]$

参照上面$\mu$的定义,若$x$有k个不同的质因子,那么

$\sum_{d|x}\mu(d)=(1+(-1))^{k}=0$

 


接下来开始证明反演的式子

$\sum_{d|n}\mu(d)F(\lfloor\frac{n}{d}\rfloor)=\sum_{d|n}\mu(d)\sum_{i|\lfloor\frac{n}{d}\rfloor}f(i)$

观察上式中$f(x)$前面的所有系数,经过等价变换之后就可以写成

$\sum_{i|n}f(i)\sum_{d|\lfloor\frac{n}{i}\rfloor}\mu(d)=f(n)$

 

还存在另一种反演的表示形式

若$F(n)=\sum_{n|d}f(d)$

则$f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)$

 

就是这个式子,在询问gcd对数的时候可以发挥神奇的力量

通过观察,在枚举时会有大量的相同的$F(\lfloor\frac{n}{i}\rfloor)$出现

那么就可以直接处理下取整后相同的一部分,大家都叫做分块的技巧

 

1.查询$gcd(i,j)==x$对数$(i<=a,j<=b)$

设$f(n)$表示$gcd(i,j)==n$的对数

设$F(n)$表示$n|gcd(i,j)$的对数

那么$F(n)=\lfloor\frac{a}{n}\rfloor*\lfloor\frac{b}{n}\rfloor$

$ans=f(x)=\sum_{x|d}\mu(\frac{d}{x})F(d)$

改变枚举方式,每次直接枚举$\frac{d}{x}$的值$t$

$ans=\sum_{t<=min(\lfloor\frac{a}{x}\rfloor,\lfloor\frac{b}{x}\rfloor)}\quad\mu(t)\lfloor\frac{a}{tx}\rfloor\lfloor\frac{b}{tx}\rfloor$

再加上分块技巧即可$O(\sqrt{max(a,b)})$通过这道题。

posted @ 2018-06-12 17:53  2018szb  阅读(162)  评论(0)    收藏  举报