组合计数和逆元
1.基本公式


图片来源 CSDN博主@1.01
相当于直接去求 \(\frac{1}{n!}\)
也就是说 咱们要是去求\(\frac{1}{n}\)逆元
2.怎么求逆元?
1.exgcd

代码模板
void Exgcd(ll a, ll b, ll &x, ll &y) {
if (!b) x = 1, y = 0;
else Exgcd(b, a % b, y, x), y -= a / b * x;
}
int main() {
cin>>n>>p;
for(ll i=1;i<=n;i++){
ll x, y;
Exgcd(i, p, x, y);
x = (x % p + p) % p;
printf ("%d\n", x);
}
return 0;
}
2.费小马定理

LL qkpow(LL a,LL p,LL mod)
{
LL t=1,tt=a%mod;
while(p)
{
if(p&1)t=t*tt%mod;
tt=tt*tt%mod;
p>>=1;
}
return t;
}
LL getInv(LL a,LL mod)
{
return qkpow(a,mod-2,mod);
}
第三种方法 递归求解


LL inv[mod+5];
void getInv(LL mod)
{
inv[1]=1;
for(int i=2;i<mod;i++)
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
就是上面要求的
于是 我们就可以很愉快的去求组合计数了
2.组合计数问题分类
1.纯高中数学类问题可以参考以下的链接
2.卡特兰数
数列的基本特征
1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900,
2674440, 9694845, 35357670, 129644790, 477638700, 1767263190,
6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452
\(n\)个\(0\)和\(n\)个\(1\),通过一系列的组合,组成一个长度为\(2n\)的序列,满足任意前缀中\(0\)的个数都不少于\(1\)的个数的序列数量
见到这种的数字你就去往这个方面去想 绝堆对(划去
递推公式是:
\(C_{atn}{}=\frac{C_{2n}^{n}}{n+1}\)
典型例题
火车进站问题
P1044
a[0]=1;
for(int i=1;i<=n;++i){
for(int j=0;j<i;++j)
a[i]+=a[j]*a[i-j-1];
}
cout<<a[n];
括号问题
一个左括号只有一个右括号可以去匹配 故用卡特兰求解
满二叉树问题
\(n\)个节点去求多少个不同的满二叉树数目
通俗易懂的几何意义
CSDN博主@2021dragon
3.二项式定理(待填坑)
4.容斥
再谈
1.A & C
特别的 我们定义 \(A_{n}^n\) = \(n\)!
以下是性质:
1. \(\tbinom{n}{m}\) = \(\frac{n!}{(n-m)!}\)
定义:在\(n\) 中选\(m\) 个数
2. \(\tbinom{n}{m} = \tbinom{n}{n-m}\)
因为选和不选是一样的
3. \(\tbinom{n}{m} = \tbinom{n-1}{m} + \tbinom{n-1}{m-1}\)
选了 在剩下的\(n-1\)再选\(m-1\) 个就行 如果没选 那么我们得选\(m-1\) 个
4. 逆元 求解
inv[i] = (p - p / i) * inv[p%i] % p
\(\prod_{i=1}^n inv[i]\) = \(\frac{1}{i!}\) \(\leftrightarrow\) \((i+1) * \frac{1}{i+1!} = \frac{1}{i!}\)
5. 二项式定理
\((a+b)^n = \sum_{i=0}^{n} \tbinom{n}{m} a^ib^{n-i}\)
显然,有以下的推论
1) \(\sum_{i = 0}^n\tbinom{n}{i} = 2^n\)
2) \(∑_{i=0}^n (−1)^i\tbinom{n}{i}=[n=i]\)
6. \(\tbinom{n}{i} * \tbinom{i}{j} = \tbinom{n}{j} * \tbinom{n-i}{i-j}\)
2.容斥
\(|A1⋃A2⋃...⋃An|=∑_{1≤i≤n}|Ai|\) \(−∑_{1≤i<j≤n}|Ai⋂Aj|\)\(+∑_{1≤i<j<k≤n}|Ai⋂Aj⋂Ak|\)\(+...+(−1)^{n-1}×|A1⋂A2⋂...⋂An|\)
2.1.二项式反演
1.形式0
\(f(n) = \sum_{i=1}^n (-1)^i\tbinom{n}{i} g(i)\) \(\Leftrightarrow\) \(g(n) = \sum_{i=1}^n(-1)^i\tbinom{n}{i} f(i)\)
2.形式1
\(f(n)=∑_{i = 0}^n \tbinom{n}{i}g(i)⇔g(n)=∑_{i=0}^n(−1)^{n−i}\tbinom{n}{i}f(i)\)
PS \(\sum_{i=0}^n\sum_{j=0}^i\) \(\Leftrightarrow\) \(\sum_{j=0}^n\sum_{i=j}^n\)
2.形式2
\(f(n)=∑_{i = n}^m \tbinom{i}{n}g(i)⇔g(n)=∑_{i=n}^m(−1)^{i−n}\tbinom{i}{n}f(i)\)
3.第二类斯大特林数
第一类
递归求解
1 2 3 4
^这里我们有3种的排列方式
^这里是3个错排的方式
^这里是2个数的错拍方式
故 ans = 3 * (2 + 1) = 9;
1 2 3 4 5
^这里我们有4种排列顺序
^这里等价4个数的ans
^等价3个数
故ans = 4 * (9 + 2) = 44;

浙公网安备 33010602011771号