Catalan數列

在這裏插入圖片描述
因爲這裏的模數是素數,所以可以用費馬小定理, 如果不是,就要用擴展歐幾里得

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
int a, b, n;

int quick_mul(int a, int b, int p)
{
    int ans = 1;
    while (b)
    {
        if (b & 1)
            ans = 1ll * ans * a % p;
        a = 1ll * a * a % p;
        b >>= 1;
    }
    return ans;
}

int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin >> n;
    a = n * 2, b = n;
    int ans = 1;
    for (int i = 1; i <= b; i++)
        ans = 1ll * ans * quick_mul(i, mod - 2, mod) % mod;
    for (int i = a; i >= a - b + 1; i--)
        ans = 1ll * ans * i % mod;
    ans = 1ll * ans * quick_mul(n + 1, mod - 2, mod) % mod;
    cout << ans << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章