文章目录
0. 前言
1. 卡特兰数证明+模板题
889. 满足条件的01序列
重点: 卡特兰数、快速幂
1e9+7
是一个特别常用到的素数,也正因为它是个素数所以我们可以通过费马小定理配合快速幂直接求得逆元。若模数不为素数,那么就只能通过拓展欧几里得算法求逆元了。可参考 [数论+模板] 裴蜀定理及扩展欧几里得算法模板(模板)的第三部分,求逆元就是一个特殊的同余方程,同余于 1。
模板代码:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MOD = 1e9+7;
int qmi(int a, int k, int p) {
int res = 1;
while (k) {
if (k & 1) res = (LL)res * a % MOD;
k >>= 1;
a = (LL)a * a % MOD;
}
return res;
}
int main() {
int n;
cin >> n;
int a = 2 * n, b = n;
int res = 1;
for (int i = a; i > a - b; --i) res = (LL)res * i % MOD;
for (int i = 1; i <= b; ++i) res = (LL)res * qmi(i, MOD - 2, MOD) % MOD;
res = (LL)res * qmi(n + 1, MOD - 2, MOD) % MOD;
cout << res << endl;
return 0;
}