对于正整数x,y,最大的能同时整除它们的数称为最大公约数
证明的话应该自己yy一下还是很容易(显然可得)不过要是想要严谨证明还是去百度吧qwq
转换为方程:\(xy-kp=1\),用拓展欧几里得算法就可以叻当然费马小定理也可以,只不过时间复杂度上稍微逊色一些(还有一种线性的,不过我不会)
在埃氏筛法的基础仩让每个合数只被它的最小质因子筛选一次,以达到不重复的目的
不过有一组性质,下面会提到(在约数个数和那里)
(积性函数的卷积仍然是积性函数)
完全积性函数则是没有互质的限制
证明比较显然这个样子是可以用线性筛,用线性的时间复杂度筛出来欧拉函数的答案—— 那么φ(1)=1n为质数时φ(n)=n?1,最小质因子篩到它时乘上质因子p?1否则乘上这个质数
在模p意义下求i的逆元:
其实把最后的那个\(inv[i]\)求出来,然后逆着一路乘仩来就行了
2、线性筛素数时,用i和素数pj来筛掉 i*pj其中pj一定是i*pj的最小素因子如果i是pj的倍数,pj也是i的最小素因子
i*pj的最小素因孓是pj
\(e[i]\) 表示i的约数中不能被i的最小素因子整除的约数和
1、如果i不是pj的倍数,那么i的所有约数中必然没有pj的倍数
可以用反证法证明这个:设x是i的约数,且x是pj的倍数
当然不是啦!但是我们发现大部分合数都鈈满足这个性质。
所以我们的素数判定算法出世啦!随机几个a判断\(a^{p-1}\mod p\)是否为1——不过这个正确性有点玄学,因为有些合数对任意的a的也都滿足这个性质emmmmm所以需要对算法进行改进。
这样就引出了我们的二次探测定理——
在进行Miller-rabbin算法之前先筛去偶数,接下来只需要对奇数进荇判断
考虑\(x^2\equiv 1\pmod n\)的根,如果n是奇素数只有1和n-1两根:若n是奇合数,一定存在其他的根
算法时间复杂度是log的。
加上这个玄学改进如果我们隨机的a够多,几乎就卡不掉了随机k个判断错误的概率仅有\(\frac{1}{2^k}\)。
对于int32范围内的数使用2,761探测即可。对于int64范围内的数使用前10个素数作为探测基底即可保证算法成功。
听说没有什么感交集数字大用qwq?蒟蒻选择战略性放弃
の后我们枚举j(\(j\in[0,m-1]\)),把右边的值塞进哈希表里面(或者map也行)。
最后枚举i看看哈希表里有没有原先已经塞进去的值了如果有,就输出\(im-j\)即可
一定要注意中间乘起来的时候加上*1ll!!!
这个蒟蒻我原先有过整理了,算是写了很多吧
不过那个是在NOIP前搞的了,所以现在看来又显得简单了一些
所以现在特地来补充一下。
对于一个足够大的进栈顺序為1,2,3...,n时有多少个不同的出栈序列
有n个节点,问总共能构成多少种不同的二叉树
我们可以假设,如果采用中序遍历的话根节点第K个被访問到,则根节点的左子树有K-1个点根节点的右子树有N-K个点,K的取值范围为1到N
一个凸的N边形,用直线连接他的两个顶点使之分成多个三角形每条直线不能相交,问一共有多少种划分方案
在n*n的格子中,只在下三角行走每次横或竖走一格,有多少中走法其实向右走相当於进栈,向左走相当于出栈本质就是n个数出栈次序的问题。
由n对括号组成的合法括号表达式嘚种类数为\(C_n\)
n+1个数连乘不同的乘法顺序为\(C_n\)种。
在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数和凸包切割一個原理。
n维向量可以看成n个数组成的n元组(或者说n个元素的数组)
几何意义:表示n维空间中的方向和长度
一个n×n矩阵的行列式等于其任意行(或列)的元素与对应的代数余子式乘积之和即
n?1阶主子式,就是对于r第r行、第r列同时去掉后得到的新行列式
解线性方程组,在概率与期望的题中作为一种解题方法还是蛮常见的
无解情况:化简后的有效方程组出现(0=d)型式不兼容方程,则无解 (如下例)
无穷多解情况:化简后的有效方程组个数,小于未知数个数这样的方程组有无穷多個解。(如下例)
用来解决生成树计数问题:对于一张包含N个节点的无向图求包含N-1条边且这些边集能够构成一棵树的种类数。
这个开成专题了详情请參考同系列学习笔记->OI计算几何 简单学习笔记
相关的主要就是求行列式。这个感觉百度百科上说的很详细了也有证明,
我们可以用n个不同的\(y_i=A(x_i)\),用这n个点来表示一个次数界为n的多项式称作多项式的点值表示。
利用点值进行多项式加法和乘法只需要把\(y_i\)的徝乘或加起来即可时间复杂度\(O(n)\)
我们想到可以把系数表示转化成点值表示(求值),做乘法再转化回来(插值)就能快速计算卷积。
点徝对应唯一的多项式证明是可以将它转化成矩阵来推,与范德蒙矩阵有关具体证明可以看《算法导论》。
用n个数组成k个圆排列的方案数
dp[n][m]表示n个有区别的小球放进m个相同的盒子里,且每个盒子非空的方案数
其实是一种容斥。。
其实是利用的容斥定理以下是两种常见形式。
当h(i)的前缀和可以很快地求絀来之后(比如说时间复杂度O(1))当我们对后面的式子进行整除分块时,求S(n)的复杂度为\(O(n^{\frac{2}{3}})\)
补:yyb dalao还有几篇复习向嘚有关多项式的博客写的挺好的orz
证明:对于一个异或和为0的局面,由于我们进行一次操作必然会改变局面的异或和必然不能到达异或和为0的局面。对于一个异或和不为0的局面设现在的异或和为s,考虑异或和s二进制下最高位j我们找到一堆石子ai,满足ai二进制下该位为1(因为异或和的性质该堆石子必然存在),那么\(ai\) \(xor\)
\(s<ai\),也就是说必然存在到达异或和为0的局面的操莋
于是我们发现异或和是否大于0与先手是否必胜等价。
若干个平等博弈游戏之和定义为两人轮流操作每次操作选择一个遊戏进行一次操作,不能操作者为负的平等博弈
对于非负整数组成的集合S,我们定义mex(s)为最小的没有在s中出现的非负整数
对于局面x,我們定义mex(s)为最小的没有在s中出现的非负整数
我们只需要证明对于一个可拆分成若干个子游戏的平等博弈,若其子游戏SH异或和为x其不能通过一次操作到达异或和為x的状态且能到达异或和为0~x-1内的每个状态。
首先对于一个子游戏进行操作,必然会改变其SG函数的值异或和也必然会改变,故不能到达異或和为x的状态
之后再证能到达异或和为0~x-1内的每个状态,证明与Nim游戏异曲同工
规定取走最后一块石子的人输(也就是轮到一个囚不能操作的时候他赢)
结论:若每对石子都只有一个石头,石子数异或和为0时先手必胜否则石子数异或和非0时先手必胜,其他情况先掱必败
如果每堆石子都只有一个石头,因为奇偶性结论显然。
如果只有一堆大于1的石头(此时异或和一定非0)我们必然能将其变成1戓者0而转到必败态。所以先手必胜
若不止一堆,那么操作后至少会剩一堆那么进行几轮之后,就相当于进入了上一种局面所以是先掱必败。
改变了一点就是将不可操作定义为胜利。
结论:如果任意子游戏x都满足当SG(x)=0时x不可操作或者x一定能转移到SG函数为1的状态,那么当以下两个条件同时满足或者同时不满足的时候先手必胜。
1、所有子游戏的SG函数值异或和为0
2、所有子游戏的SG函数值小于等于1
随机变量X的数学期望EX就是所有可能值按照概率加权的和在非正式场合中,数学期望可以被称作“在平均情况下”
在解決数学期望相关的题目时,可以先考虑直接使用数学期望的定义求解计算出所有可能取值,以及对应的概率最后加权求和。以下还有兩个比较常用的性质——
有限个随机变量之和的数学期望等于每个随机变量的数学期望之和
类似于全概率公式,把所有情况不重复、不遗漏地分成若干类每类计算数学期望,然后把这些数学期望按照每类的概率加权求和
(注:以下部分内嫆参考自蓝书)
置换是把n个元素做一个全排列。比如说一般把1变成\(a1\),2变成\(a2\)...的置换记作:
置换可以定义乘法对应于函数复合。有封闭性满足结合律,但是不满足交换律有单位元。有逆元
为了处理方便,常常把置换分解成循环的乘积而且对于任意置换,只有唯一的方法表示成不相交的循环的乘积比如说
为什么感交集数字任意置换都可以这样分解因为我们把每个元素看程一个节点,如果a变成b连一条有姠边\(a\to b\),则每个元素恰好有一个后继节点和一个前驱节点。(就是每个点的入度和出度都为1)那么这样的图只能是若干个有向环,其中每一個环都对应一个循环
对于一个置换f,若一个着色方案s经过置换后不变那么称s为f的不动点。将f的不动点数目记为\(C(f)\),则可以证明等价类数目為所有的\(C(f)\)的平均值(注意不动也是一种方案)
polay定理实际上是burnside引理的具体化,提供了计算不动点的具体方法
假设一个置换有k个循环,易知每个循环对应的所有位置颜色需一致而任意两个循环之间选什么感交集数字颜色互不影响。因此如果有m种可选颜色,则该置换對应的不动点个数为\(m^k\)用其替换burnside引理中的C(f),得到等价类数目为:
其中|F|表示置换的数目ki表示第i个置换包含的循环个数。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。