**

大米饼正式退役了,OI给我带来很多东西

我会的数学知识基本都在下面了

博客园的评论区问题如果我看到了应该是会尽力回答的...

这也是我作为一个OIer最后一次讲课的讲稿

20190731

**

多项式乘法

FFT

基本概念

1.多项式的两种表达(拉格朗日插值法)

多项式:\(A(x) = \sum_{i=0}^{n-1}a_ix^i\),最高项次数为\(n-1\),次数界为\(n\)

\((a_0,\cdots,a_{n-1})\)为多项式的系数表达, \((x_0,y_0),\cdots,(x_{n-1},y_{n-1})\) 为多项式的点值表达

2.\(n\)次单位根(泰勒展开(对多项式也适用),欧拉公式,单位根,引理)

泰勒展开:

函数f(x)在\(x=x_0\)除的展开为:

$f(x) = f^0(x_0) + f^1(x_0)(x-x_0) + f2(x_0)\frac{(x-x_0)2}{2!} + \cdots + f^i (x_0)\frac{(x-x_0)^i}{i!} +\cdots $

其中\(f^i(x)\)表示\(f(x)\)的\(i\)次导数(所以要运用首先你得记住初等函数的求导公式):

\[练习:\\
e^x \ = \ \sum_{i}\frac{x^i}{i!}\\
ln(1-x) \ = \ - \sum_{i\ge 1} \frac{x}{i} \\
cos(x) \ = \ \sum_{i} \frac{(-1)^ix^{2i}}{(2i)!} \\
sin(x) \ = \ \sum_{i} \frac{(-1)^ix^{2i+1}}{(2i+1)!} \\
\frac{1}{(1-x)^k} \ = \ \sum_{i}(^{k+i-1}_i)x^i \\
\]

可以证明一个表达式:

\[e^{\pm ix} = cos(x) \pm isin(x)
\]

这指出\(e^{ix}\)对应的复平面上的点是 \((cos(x),sin(x))\) ,另外得到欧拉公式:

\[e^{\pi i } + 1 = 0
\]

有:

\[e^{2\pi i} = 1
\]

定义n次单位根\(x^n = 1\) 为满足的\(n\)个复数

一个可行的方式是$\omega_n \ = \ e^{2 \pi i /n} $ ,在复数平面上,形成了一个乘法的循环,即\(\omega_n^k = \omega_n^{k \ mod \ n}\)

aaarticlea/png;base64,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" alt="">

性质:

1.消去引理:$ \omega_{dn}^{dk} = \omega_n^k ,d \neq 0$

​ 2.折半引理: n次单位跟平方的集合 = n/2次单位根平方的集合

​ 3.求和引理(等比数列求和即可证明) :

\[\frac{1}{n}\sum_{i}^{n-1}\omega^{ij}_n \ =
\begin{cases}
1 & j \ mod \ n = 0\\
0 & j \ mod \ n !=0\\
\end{cases}
\]

DFT

1.概念:

DFT,IDFT,矩阵(定义,转置,乘法,初等变换(换法,倍法,消法),逆矩阵(存在性)),逆矩阵(求和引理)

​ 定义 $A(x) = \sum_{i}^{n-1} a_ix^i $ 的DFT为点值表达:\(((w_n^0,y_0),\cdots,(w_n^{n-1},y_{n-1} ))\)

​ 反过来可以对一个点值表达定义求表达,称为IDFT

​ 用矩阵表达:$Y = VA \Rightarrow A = V^{-1}Y $

​ $A_i = a_i, Y_i = y_i , V_{i,j} \ = \ w_n^{ij} $

根据求和引理:$V^{-1}{ij} =\frac{w{n}^{-ij} }{n} $

完整写一下DFT和IDFT就是

\[y_j \ = \ \sum_{i=0}^{n-1} a_i w_n^{ij} \\
y_j \ = \ \frac{1}{n} \sum_{i=0}^{n-1} a_i w_n^{-ij} \\
\]

2.求法:(\(A_0,A_1\),折半引理,蝴蝶操作)

两个式子本质上是一样的,考虑求第一个:

对于A(x),构造

\[A_0 (x) = a_0 + a_2 x^2 + \cdots + a_{n-2}x^{n/2-1} \\
A_1 (x) = a_1 + a_3 x^2 + \cdots + a_{n-1}x^{n/2-1} \\
\Rightarrow
A(x) = A_0(x^2) + xA_1(x^2) \\
根据折半引理,问题规模大小就被我们减到了一半 \\
具体实现,只需要翻转系数的二进制位就可以了 \\
\]

//len为多项式次数界,2^L = len  , C 为自定义复数
for(int i = 0;i < len; i++) R[i] = R[i>>1]>>1 | (i&1) << (L-1) ;
void FFT(C *a,int f) {//f = 1/-1 ,正/逆变换
for(int i = 0; i < len; i++) if(i < R[i]) swap(a[i],a[R[i]]);
for(int i = 1; i < len; i<<=1) {
C wn(cos(pi/i),f * sin(pi/i));
for(int j = 0; j < len; j+=(i<<1)) {
C w(1,0);
for(int k = 0; k < i; k++,w*=wn) {
C x = a[j + k],y = w * a[j + i + k];
a[j + k] = x + y,a[j + i + k] = x - y;
}
}
}
if(f==-1) for(int i = 0; i < len; i++) a[i] /= len;
}

NTT

使用于运算在mod P 的意义下进行

如果n | P -1 , 令 G 为 P 的原根,

MTT

处理不是ntt模数的情况

拆系数ntt:

按照二进制拆成前15位和后15位,分别相乘

构造 \(P(x) = A(x) + iB(x) , Q(x) = A(x) - iB(x)\)

简单推导结论:\(dft \ Q_k \ = \ dft \ P_{n-k}\)

另外还有三模数ntt(不会。。。)

例题

1.通串的匹配问题

2.loj6434 神仙的游戏

3.bzoj3992 序列统计 (原根)

分治FFT 

1.普通形式模板

2.f = f 卷 f 的形式,直接做会有问题

只会在l = 左边界的时候有点问题,不妨直接不确定的那部分系数去掉

当 l 是不是边界的时候将贡献/2,在分治的最底层乘回来

3.两道可以感受分治ntt的好题:

cd 848E Days of Floral Colours (1)

uoj401 青蕈领主 (2)

**FWT FMT FST **

1.问题,基本思想,构造的东西

可以参考

AGC034F RNG and XOR

cf1119H Triple

uoj348 周区划分

循环卷积与n进制异或fwt

(考虑FFT系数超出设置的len会怎么样?) 

JZOJ6239 

同样我们根据最高位分类:\(A_0,A_1,\cdots,A_{n-1}\)

考虑只有一维的情况,需要找到一个变换

使得变换->点乘->逆变换之后得到的是mod n的加法

可以联想到循环卷积,直接令变换的矩阵为V即可

和fwt同理扩展到很多维就可以了

生成函数和多项式

1.定义

策爷的课件

​ OGF EGF ,加法乘法的意义

2.例子:

二进制数,背包的计数理解OGF的拼接

置换的计数,无向图计数理解序列EGF的拼接

3.多项式相关

0.预备知识:高中数学,部分高等数学

​ 多项式求导,多项式积分

​ 1.多项式求逆,多项式开根

bzoj3625 小朋友和二叉树

​ 分治fft很多时候都多项式求逆做

​ 2.多项式ln

luogu U79666 树上深度博弈

​ 3.牛顿迭代,多项式exp ,多项式求幂

luogu 4389 付公主的背包

uoj50 链式反应

​ 4.多项式除法,取模

​ 常系数线性齐次递推 (*)

​ (行列式定义,的五点性质:转置,换法(推),倍法(推),分拆(推出展开),消法)

luogu 4723 线性递推模板

​ 5.多点求值和快速插值( *)

uoj182 a^-1 + b problem

​ 6.拉格朗日反演 (*)

\[f(g(x)) = g(f(x)) = x ,即:f是g的复合逆\\
[x^n]f(x) = \frac{1}{n}[x^{n-1}](\frac{x}{f(x)})^n \\
推广形式:
[x^n]h(g(x)) = \frac{1}{n}[x^{n-1}]h'(x)(\frac{x}{f(x)})^n \\
\]

bzoj3684 大朋友和二叉树

这里有一篇十分通俗的微分doc :

一阶微分方程解法

数论

基本定理

完全剩余系性质

威尔逊定理:

\[p是质数 \Leftrightarrow (p - 1)! \equiv -1 (mod \ p)\\
\]

费马小定理:

\[p 是质数,a不整除p \Rightarrow a^{p-1} \equiv 1 (mod p)
\]

欧拉定理:(积性函数,线筛)

\[phi(p)定义为1 \to p-1和p 互质的数的个数 \\
如果p = \prod_{i=1}^{m} a_i^{b_i} , \phi(p) = p \prod_{i=1}^{m} (1-\frac{1}{a_i}) \\
欧拉定理描述为:\\
(a,p) = 1 \Rightarrow a^{\phi(p) } \equiv 1 (mod \ p ) \\
\]

勒让得定理:

\[n!的唯一分解中质因p的个数为:\\
\sum_{k\ge1}\lfloor \frac{n}{p^k} \rfloor \\
\]

中国剩余定理(CRT):

\[\begin{cases}
x \equiv a_1 (mod \ m_1) \\
x \equiv a_2 (mod \ m_2) \\
\vdots \\
x \equiv a_n (mod \ m_n) \\
\end{cases} \\
当m_1,m_2,\cdots,m_n两两互质一定有解为:\\
x \equiv \sum_{i=1}^{m}a_iM_iM_i^{-1} (mod \ M) \\
其中M=\prod_{i=1}^{n}m_i ,M_i = \prod_{j=1,j \neq i}^{n}m_j\\
M_i^{-1}M_i \equiv 1 (mod \ m_i) \\
\]

扩展CRT:\(m_1,m_2,\cdots,m_n\)不满足两两互质;

(百度的第一篇博客推法思路大致是的,但是里面有很多多余的步骤?)

\[只需要考虑如何解:
\begin{cases}
x \equiv a_1 (mod \ m_1) \\
x \equiv a_2 (mod \ m_2) \\
\end{cases} \\
x = k m_1 + a_1 \\
\Rightarrow km_1 = a_2 - a_1 (mod \ m_2) \\
有解的充要条件是:(m_1,m_2) | a_2 - a_1 \\
\Rightarrow k\frac{m_1}{(m_1,m_2)} = \frac{a_2 - a_1}{(m_1,m_2)} (mod \ \frac{m_2}{(m_1,m_2)}) \\
\Rightarrow k = \frac{a_2 - a_1}{(m_1,m_2)}(\frac{m_1}{(m_1,m_2)})^{-1} (mod \ \frac{m_2}{(m_1,m_2)})
\\
我们右边 = t ,则有k = k'\frac{m_2}{(m_1,m_2)} + t \\
x = k m_1 + a_1 = k'\frac{m_1m_2}{(m_1,m_2)} + tm_1 + a_1 \\
即: x \equiv (inv({m_1\over (m_1,m_2)},{m_2\over (m_1,m_2)})*{(a_2-a_1)\over (m_1,m_2)})\%{m_2\over (m_1,m_2)}*m_1+a_1 (mod \ \frac{m_1m_2}{(m_1,m_2)}) \\
\]

素数判定和大整数分解

Miller-Rabin

1.理论基础:

​ 1)费马小定理的逆定理

​ 有一定概率不成立,我们称这样的p为伪素数

​ 2)二次探测定理:

​ $p是素数,x^2 \equiv 1 (mod \ p ) \Rightarrow x \equiv -1 \ or \ 1 (mod \ p) $

2.算法流程 miller_rabin(long long n)​:

​ 1)随机一个数字$a < n $, 设 \(u\) 是 \(n - 1\) 除去\(2\)的次幂剩下的数

​ 2)对 \(a^{u}\) 和 \(a^{2u}\) 做二次探测并不断令\(u = 2u\) 直到$ u = n -1$

​ 3)对\(a^u\) 即 \(a^{n-1}\)检验费马小定理

​ 可以多做几次.

Pollard-Rho

1.理论基础:

1)生日悖论

​ 2)floyd判环法

​ 相遇后,令一个指针不动,另一个回到起点二者同速运动可巧妙找到环的起点

2.算法流程 pollard-rho(long long n) :

1)miller-rabin(n)检测成功则退出,否则进入2)尝试找到一个非平凡因子

​ 2)用$ x_{i} = (x_{i-1}^2 + c) \ mod \ (n-1) + 1 $ 生成伪随机数

​ 判断\(gcd(x_i - y ,n )\)是否是非平凡因子,是则退出

​ 在\(i\)是2的幂处记录\(y = x_i\),在\(2i\)处更新\(y\),其间如果有\(x_{(i+1) \to 2i} = y\)则说明出现了环

​ 这样做据说是\(O(n^{\frac{1}{4}})\)的 ,我不会证

另:O(1)快速乘法

inline long long multi(long long x,long long y,long long mod)
{
long long tmp=(x*y-(long long)((long double)x/mod*y+eps)*mod);
return tmp<0 ? tmp+mod : tmp;
}
eps 是用来设置精度的
虽然快但是比较容易炸精度,慎用...

二次剩余

1.判定:

​ 二次剩余的个数为\(\frac{p-1}{2}\)

​ 勒让徳符号 \((\frac{a}{p}) = a^{\frac{p-1}{2}}\) (a<p)

​ 欧拉判别法:

\[a 是 0 的充分必要条件是(\frac{a}{p}) = 0\\
a 是 p 的二次剩余的充分必要条件是(\frac{a}{p}) \equiv 1 (mod \ p) \\
a 是 p 的二次非剩余的充分必要条件是(\frac{a}{p}) \equiv -1 (mod \ p) \\
\]

(证明:先用费马小证=1的必要以及二分性,再配对反证充分性)

2.(*)求法:cipolla算法

​ 解:$x^2 \equiv n (mod \ p) $

​ 考虑随机一个\(p\)的二次非剩余$a^2 - n $

​ 定义一个新的数域(类似复数域)令\(w = \sqrt{a^2 - n}\)

​ 则\(x = \pm (a+w)^{\frac{p+1}{2}}\)

\[\begin{align}
&(a+w)^{p+1}\\
&= (a+w)^p (a+w) \\
&= (a^p+w^p)(a+w) \\
&= (a-w)(a+w) \\
&= a^2 - w^2 \\
&= n \\
\end{align}
\]

最后结果里面的x虚部一定是0,据说是因为由拉格朗日定理\(f(x) \equiv 0\)在mod p 的数域下最多只有f(x)的最高次数那么多个根,我也不知道为什么.....

组合数

1.部分组合恒等式:

\[\begin{align}
&定义可得:\\
&1) \ (^n_m) = (^{n-1}_{m-1}) + (^{n-1}_{m})\\
&2) \ (^{n+1}_m) = \frac{n+1}{n-m+1}(^{n}_{m}) \\
&3) \ (^n_{m+1}) = \frac{n-m}{m+1}(^{n}_{m}) \\
&4) \ (^{n+1}_{m+1}) = \frac{n+1}{m+1}(^n_m) \\
&下面要讲的二项式定理可以推:\sum_{i=0}^n(^n_i) = 2^n \\
&\sum_{i=0}^{min(a,b)}(^a_i)(^b_i) = (^{a+b}_b) \Rightarrow \sum_{i=0}^n(^n_i)^2 = C_{2n}^n\\
&组合数的一个竖列和斜列都是可以化简的:\\
&1)\sum_{i=0}^{k}(^{n+i}_{m+i}) = (^{n+k+1}_{m+k}) - (^n_{m-1}) \\
&2)\sum_{i=0}^{k}(^{n+i}_{m}) = (^{n+k+1}_{m+1})-(^n_{m+1}) \\
\end{align}
\]

2.二项式定理

\[(a+b)^n = \sum_{i=0}^{n} (^n_i)a^ib^{n-i} \\
\]

这个可以归纳证.

3.lucas定理

\[p是素数,设n = sp+q,m = tp+r (q,r<p)\\
则:\\
(^n_m) \equiv (^s_t)(^q_r) \\
\]

这个可以在p进制下扩展

可以构造\((1+x)^n\) 利用二项式定理证明

4.扩展lucas :

bzoj4830 抛硬币

bsgs

\[\begin{align}
&求:A^x \equiv B (mod \ C)的最小非负整数解,满足(A,C)=1\\
&(A,C)=1 \Rightarrow A^x\equiv A^{x \ mod \ \phi(c)} (mod \ C)\\
&那么令m = \lceil \sqrt C \rceil ,A^{im-j} \equiv B(mod \ C)\\
&(A^{m})^i \equiv A^jB(mod \ C)\\
&用hash表存下右边,枚举左边即可求解 \\
\end{align}
\]

时间复杂度:\(O(\sqrt C 或 \sqrt C log \sqrt C)\)

扩展bsgs

\[问题一样,只是没有(A,C) = 1 ,这是就没有欧拉定理了 \\
首先判掉B = 1,0的情况 ,考虑不断除去a 和模数的gcd:\\
设D = \prod_{i=1}^{k}d_i,其中d_i表示第i次求得a和模数的gcd\\
A^{x-k} \frac{A^k}{D} \equiv \frac{B}{D} (mod \ \frac{C}{D})\\
枚举x = 1 \to k ,x > k 的移项之后可以直接bsgs
\]

**线性代数 **

1.矩阵

​ 高斯-亚当消元求逆矩阵(满秩)

​ 线性相关/无关,张成,基

​ 线性基

​ 插入,合并,询问最大/最小值,查询排名,查询第k小

bzoj 2844 albus就是要第一个出场

bzoj3569 DZY Loves Chinese II

你们哪天看懂了证明记得告诉我

2.行列式

\[det(A) = \sum_{P} (-1)^{\tau(P)} \prod_{i=1}^{n} A_{i,p_i}\\
\]

​ 性质:

​ 1.初等变换:1 2 3

​ 2.\(det(A^\tau) = det(A)\)

​ 3.\(det(A) = det(A)det(B)\)

​ 证明:拉普拉斯定理

​ Matrix - tree 定理 (K=D-A)

2016级的*ZJ学长

BEST定理

群论

1.群的判定:

​ (a)封闭性:任意\(a,b\in G\) ,存在\(c \in G,a \cdot b=c\)

​ (b)结合律:任意$a,b,c\in G \(,满足\)(a \cdot b)\cdot c = a \cdot (b \cdot c) $

​ (c)单位元:存在\(e \in G\),对任意\(a \in G\),满足\(a \cdot e = e \cdot a = a\)

​ (d)逆元:对任意\(a \in G\),存在\(b \in G\),\(a \cdot b = b \cdot a = e\),记做\(b = a^{-1}\)

​ (置换,置换的乘法,置换群)

2.burnside 引理

\[\begin{align}
&L = \frac{1}{|G|}\sum_{j=1}^{s}D(a_j)\\
&其中L表示本质不同的元素个数,G表示置换群为\{a_1,\cdots,a_s\},\\
&D(a_j)表示置换a_j下的不动点个数\\
&证明:\\
&引理1:定义稳定核G(c)为集合\{f|f \cdot c = c ,c \in G\} ,它是一个群\\
&引理2: 和c本质相同的方案数:\frac{|G|}{G(c)}\\
&证明:\\
& \ \ 若f,g,c \in G \ 则 \ f \cdot c = g \cdot c \Leftrightarrow f^{-1}g \in G(c) \\
& \ \ 那么对于一个f ,和它作用相同的置换g的集合是\{f \cdot h | h \in G(c)\} \\
& \ \ 那么和c 本质相同的方案数为\frac{|G|}{|G(c)|}\\
&立即推出:|G(c)| = \frac{|G|}{|等价类(c)|}\\
&对f\cdot c=c的(f,c)计数\\
&1) \sum_{j=1}^{s}D(a_j)\\
&2) \sum_{i=1}^{n}|G(c)| = \sum_{i=1}^{n}\frac{|G|}{|等价类|} = L|G|\\
&最后一步是一起考虑一个等价类的贡献,1)和2)相等即推出burnside引理!
\end{align}
\]

3.polya 定理

​ 每个置换都可以写成若干个互不相交的循环的乘积

​ 设G是一个n阶置换的群,用m种颜色去涂:

\[L\ = \ \frac{1}{G}(m^{c(g_1)} + m^{c(g2)}+\cdots+m^{c(g_n)}) \\
\]

其中\(g_i \in G\),\(c(g_i)\)为\(g_i\)中循环的个数

luogu 4916 魔力环

prufer 序列

有标号无根树

生成,性质,还原

bzoj1005 明明的烦恼

概率论

我理论部分基本空白,只知道一些结论:

\(f(x)\)在\([L,R]\)的期望

\[\begin{align}
如果x是一个[L,R]均匀分布的随机变量\\
E(f(x)) \ = \ \frac{\int_{L}^{R} f(x) \ dx}{R-L} \\
\end{align}
\]

贝叶斯公式

\[P(A|B) = \frac{P(B|A)P(A)}{P(B)} \\
\]

uoj299 游戏

博弈论

....

重点理解sg函数

容斥和反演

基本形式

\[\begin{align}
ans = \sum_if(i)a_i \\
\end{align}
\]

组合数容斥

\[\begin{align}
&f(i) = (-1)^i\\
&\sum_{i=0}^{n}(-1)^i(^n_i) = [n=0] \\
&因为:(或者直接考虑(1-1)^n)\\
&\begin{cases}
当n = 0,显然= 1\\
当n \gt 0:原式= \sum_{i=0}^{n-1}(-1)^{i+1}(^{n-1}_i) + \sum_{i=0}^{n-1}(-1)^i(^{n-1}_i) = 0\\
\end{cases}
&\end{align}
\]

loj2351 毒蛇越狱

**二项式反演 **

\[f(n) = \sum_{i=0}^{n}(^n_i)g(i) \Leftrightarrow g(n) = \sum_{i=0}^{n}(-1)^{n-i}(^n_i)f(i)\\
另一种更好看的形式:\\
f(n) = \sum_{i=0}^{n}(-1)^{i}(^n_i)g(i) \Leftrightarrow g(n) = \sum_{i=0}^{n}(-1)^{i}(^n_i)f(i)\\
另一种不太好看的形式:\\
f(i) = \sum_{j\ge i}(^j_i)g(j) \Leftrightarrow g(i) = \sum_{j \ge i}(-1)^{j-i}(^j_i) f(j) \\
\]

经典的错排问题

loj3120 珍珠

斯特林容斥

\[\begin{align}
&f(i) = (-1)^{i-1}(i-1)! \\
&\sum_{i=1}^{n}\{^n_i\}(-1)^{i-1}(i-1)! = [n=1] \\
&因为:\\
&\begin{cases}
当n = 1,显然 = 1\\
当n \gt 1,原式 = \sum_{i=1}^{n-1}(-1)^{i-1}i!\{^{n-1}_{i}\}+\sum_{i=1}^{n-1}(-1)^ii!\{^{n-1}_{i}\} = 0\\
\end{cases}
\end{align}
\]

斯特林数(定义,递推式,求法 : I 倍增FFT,||卷积,用于转换幂,反转公式)

bzoj 异或图

斯特林数

1.定义:

\[1.两类数的递推式:\\
[^n_i] = [^{n-1}_{i-1}]+(n-1)[^{n-1}_i]\\
\{^n_i\} = \{^{n-1}_{i-1}\} + i\{^{n-1}_i\}\\
根据定义 \sum_{i=0}^{n}[^n_i] = n!\\
\]

2.斯特林数一行的求法:

第一类:(倍增fft)

\[[_m^n] = [x^m] x^{\overline n}\\
倍增FFT即可
\]

\(O(m \ log \ m )\)

第二类:(存在卷积形式)

\[根据组合意义可以知道:\\
n^m = \sum_{i=0}^{m}(^m_i)\{^n_i\}i!\\
对上面的式子二项式反演或者直接考虑容斥可以得到:\\
\{^n_m\} = \frac{1}{m!}\sum_{i=0}^{m}(-1)^{m-i}(^m_i)i^{n}\\
立即推出卷积形式:\\
\{^n_m\} = \sum_{i=0}^{m}\frac{(-1)^{m-i}}{(m-i)!}\frac{i^{n}}{i!}\\
\]

\(O(m \ log \ m )\)

bzoj2159 crash的文明世界

**斯特林反演 **

\[f(n) = \sum_{i=1}^{n} \{^n_i\} g(i) \Longleftrightarrow g(n) = \sum_{i=1}^{n} (-1)^{n-i} [^n_i]f(i)\\
f(n) = \sum_{i=1}^{n} [^n_i] g(i) \Longleftrightarrow g(n) = \sum_{i=1}^{n} (-1)^{n-i} \{^n_i\}f(i)\\
证明可以应用反转公式:\\
\displaystyle \sum_{k=m}^n (-1)^{n-k}\begin{bmatrix}n\\k\end{bmatrix} \begin{Bmatrix}k\\m\end{Bmatrix}=[m=n]\\
\sum_{k=m}^n (-1)^{n-k}\begin{Bmatrix}n\\k\end{Bmatrix} \begin{bmatrix}k\\m\end{bmatrix}=[m=n]\\
反转公式的证明可以应用斯特林数和幂的关系:\\
x^n = \sum_{i=0}^{n}\{^n_i\}x^{\underline i}\\
x^{\overline n} = \sum_{i=0}^{n}[^n_i]x^i\\
这个关系归纳可证,再带入幂的转化关系可证反转\\
\]

我只做过裸题

**容斥系数 **

\[本质是我们只需要满足\\
\sum_{i}^{n}f(i)g(i) = \delta_n \\
g,\delta是确定的,所以我们可以直接O(n^2)解出f\\
或者可以直接反演求出f,某些情况或者可以用生成函数推出f\\
或者:直接打表鸭!\\
\]

玲珑杯线上赛河南专场 Round#17 B

min-max容斥

\[\max(S)=\sum_{T\subseteq S} (-1)^{|T|-1}\min(T)\\
E(\max S)=\sum_{T\subseteq S} (-1)^{|T|-1}E(\min T)\\
\text{lcm}(S)=\prod_{T\subseteq S} (-1)^{|T|-1}\gcd(T)\\
min和max当然是对称的\\
\]

loj2542 随机游走

luogu4704 重返现世

kth min-max容斥

\[推容斥系数的技巧可以用了:\\
[i=k] = \sum_{j=1}^{i}(^{i-1}_{j-1})f(j) \\
二项式反演得:\\
f(i) = \sum_{j=1}^{i}(-1)^{i-j}(^{i-1}_{j-1})[j==k] \\
即f(i) = (-1)^{i-k}(^{i-1}_{k-1}) \\
kthmax(S) = \sum_{T \subset S} (-1)^{|T|-k}(^{|T|-1}_{k-1})min(T)
\]

子集反演

\[f(S) = \sum_{T \subset S}g(T) \Leftrightarrow
g(S) = \sum_{T \subset S}(-1)^{|S|-|T|}f(T)\\
f(S) = \sum_{S \subset T}g(T) \Leftrightarrow
g(S) = \sum_{S \subset T}(-1)^{|T|-|S|}f(T)\\
\]

loj 2983 数树

**单位根反演 **

\[\frac{1}{n}\sum_{j=0}^{n-1}\omega_n^{j(i-t)} = [i \% n=t]\\
\]

loj6485 LJJ学二项式定理

loj3058 白兔之舞

**莫比乌斯反演 **

Po姐的ppt

莫比乌斯函数:

1.定义

\[\mu(n) =
\begin{cases}
1 &n=1\\
(-1)^r & n=p_1\cdots p_r,p_1\cdots p_r 是两两不同的质数\\
0 &其它,即n有大于1的平方因子\\
\end{cases}\\
\]

2.性质:

\[\begin{align}
&1)积性\\
&2)\sum_{d|n} \mu(d) = [n=1] \\
&3)\sum_{d|n}\frac{\mu(d)}{d}=\frac{\phi(n)}{n}\\
&(考虑\sum_{i=1}^{n}[gcd(i,n)=d] = \phi(\frac n d) 即可证3)\\
\end{align}
\]

反演的两种形式:

\[f(n) = \sum_{d|n} g(d) \Leftrightarrow g(n) = \sum_{d|n}\mu(\frac{n}{d})f(d)\\
f(n) = \sum_{n|d} g(d) \Leftrightarrow g(n) = \sum_{n|d}\mu(\frac{d}{n})f(d)\\
\]

bzoj2820 YY的GCD

bzoj3434 时空穿梭

loj 2085 循环之美

OIwiki !

(大家可能只有自行学习杜教筛,洲阁筛,和min25筛了)

杜教筛的复杂度,我当时学的时候一直没有搞清楚有一点,后来看rqy的博客看到了:

\[O(\sum_{i=1}^{\sqrt n} \sqrt \frac{n}{i}) \approx O(2\sqrt{n}\int_0^{\sqrt n}i^{\frac{1}{2}}) = O(n^{\frac{3}{4}})\\
\]

(由于没时间讲计算几何了,大家记得学一下闵可夫斯基和)

GOOD BYE OI的更多相关文章

  1. 再见,OI

    你好,NOIP 2015年9月1日 正式成为了福建省莆田一中的一名高一成员 后来学校搞了选修 大家都很激动 因为自己的兴趣和特长能够得到发挥了(或者说能逃课或者看好多电影) 发现选修提供的选项中有好几 ...

  2. 告别我的OI生涯

    本文章写于2008年12月15日. 随着2008noip的结束,我也结束了我的OI生涯. 信息竞赛也许是从小到大让我最最努力的一件事.我记得参加2006noip初赛前,每天中午为了上信息课都吃不上中午 ...

  3. 收集一些关于OI/ACM的奇怪的东西……

    一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...

  4. 继续OI

    NOIP2016于2016.11.20日12:00正式结束. 我作为oi的生涯 或许会结束? 或者继续? 然而前途依然迷茫,我是否应该继?或是放弃? 距离省选还有3~4个月,我该何去何从? 虽然已经经 ...

  5. 再见OI

    NOIP2016终章 自己弱还脑残加手残 再见OI 你好高考 你好明天 "没有泪水的日子会轻松很多 但我的心还是会痛" ------------------------------ ...

  6. 他们在军训,我在搞 OI(Ending)

    Day 7 上午看看数学书,老师让我把导数相关的概念学了.这也没有多高大上,就是一坨公式需要背,什么 (a)' = 0 啦,什么 (xn)' = n·xn-1 啦,什么 sin'(x) = cos(x ...

  7. OI总结(垃圾排版就忽略了吧)

    学OI一年了,到现在联赛所需要的知识已经基本学完了.现在,有必要回过头来,总结总结自己一年来学到的知识以及得到的经验教训. 基础 语言基础 C++的语言基础啥的就略了吧. 算法复杂度分析 O:复杂度的 ...

  8. Good Bye 2013 A

    A. New Year Candles time limit per test 1 second memory limit per test 256 megabytes input standard ...

  9. 关于我的OI生涯(AFO){NOIP2016 后}

    这篇我就随意写啦~不用统一的“题解”形式.♪(^∀^●)ノ 也分好几次慢慢更吧~ 对于NOIP2016的总结,我本想善始善终back回,但是心情不足以支撑我,那就只能有始有终了......下面进入我的 ...

随机推荐

  1. unity工具开发

    1.EditorWindow通过拖拽获取文件夹或者文件路径 #region 拖拽相关 Rect rect4 = EditorGUILayout.GetControlRect(); //将上面的框作为文 ...

  2. Mysql系列(十)—— 性能分析工具profiling

    转载自:http://www.ywnds.com/?p=8677 explain是从mysql怎样解析执行sql的角度分析sql优劣.profiling是从sql执行时资源使用情况的角度来分析sql. ...

  3. RandomAccessFile vs FileChannel.open(path);

    What kind of FileChannel object does the FileChannel.open(path) method return? Is it still random ac ...

  4. SQLServer之列数据转换为行数据

    UNPIVOT特点 UNPIVOT运算符通过将列旋转到行来执行PIVOT的反向操作,UNPIVOT 并不完全是 PIVOT 的逆操作. PIVOT 执行聚合,并将多个可能的行合并为输出中的一行.UNP ...

  5. Asp.net core 简单介绍

    Asp.net core 是一个开源和跨平台的框架,用于构建如WEB应用,物联网(IoT)应用和移动后端应用等连接到互联网的基于云的现代应用程序.asp.net core 应用可运行.net和.net ...

  6. BindRequired and Required

    [https://www.cnblogs.com/tdfblog/p/required-and-bindrequired-in-asp-net-core-mvc.html] Required:对值进行 ...

  7. Spring扩展点之BeanFactoryPostProcessor

    前言 BeanFactoryPostProcessor接口是Spring中一个非常重要的接口,它的接口定义如下 public interface BeanFactoryPostProcessor { ...

  8. Centos 7 JDK 安装(默认之前没有安装过)

    第一步: 安装JDK,先检查JDK是否存在,输入以下命令回车: java -version 没有安装过会显示: [root@heyouhao /]# java -version [root@heyou ...

  9. 10. Javascript 前后端数据加密

    为了加强项目的接口安全程度,需求如下 var options = { // 前端需要传送的数据加密 data: { abc: 123, bcd: 123, cds: '撒旦教付货款12313', }, ...

  10. 实验吧——让我进去(hash长度扩展攻击)

    题目地址:http://ctf5.shiyanbar.com/web/kzhan.php 在页面源码没发现什么,于是用burp进行抓包重放 看到有setcookie,于是重新刷新页面拦截数据包(这次才 ...