数论笔记—卡特兰数、扩展欧几里得

数论笔记—卡特兰数、扩展欧几里得

1.卡特兰数

题目

给定 n 个 0 和 n 个 1,它们将按照某种顺序排成长度为 2n 的序列,求它们能排列成的所有序列中,能够满足任意前缀序列中 0 的个数都不少于 1 的个数的序列有多少个。

题目链接

答案即卡特兰数,预处理累乘数之后,计算组合数,使用快速幂求逆元(费马小定理)

卡特兰数=C2nnn+1 

下述问题的答案也是卡特兰数

(1)n个结点的二叉树数量h(n) ;

(2)矩阵链乘:P=A1×A2××An,有多少种不同的计算次序?(相当于加括号,问合法括号序列有多少个)

(3)一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

(4)有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?(将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈)

内容来自参考题解

2.扩展欧几里得定理

作用

用于求逆元,费马小定理不适用于非质数的情况

求解线性同余方程 AixBi(mod mi)

裴蜀定理

对于不全为0的整数a,b,则一定存在整数x,y,使得ax+by=gcd(a,b);

exgcd模板

int exgcd(int a, int b, int &x, int &y){
if(!b){
   x = 1; y = 0;
   return a;
   
}
int d=exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}

线性同余方程 AixBi(mod mi) 可以转化为 Ai  x+mi  y= Bi

gcd(Ai,mi)%d ==0时有解

答案为 xd/b

乘法逆元

求解线性同余方程 Aix1(mod mi) ,即可求得Ai的乘法逆元

//用于求解模数非质数时的乘法逆元, 需要满足Aimi互质

posted @   通宵  阅读(73)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示