• 卡特兰数模板


    卡特兰数参考链接 ( 里面有关于其在一些题目的应用 )

    1、前三十项卡特兰数表

    [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,18367353072152,69533550916004,
     263747951750360,1002242216651368,3814986502092304]
    View Code

    2、卡特兰数求模模板

    const int C_maxn = 1e4 + 10;
    LL CatalanNum[C_maxn];
    LL inv[C_maxn];
    inline void Catalan_Mod(int N, LL mod)
    {
        inv[1] = 1;
        for(int i=2; i<=N+1; i++)///线性预处理 1 ~ N 关于 mod 的逆元
            inv[i] = (mod - mod / i) * inv[mod % i] % mod;
    
        CatalanNum[0] = CatalanNum[1] = 1;
    
        for(int i=2; i<=N; i++)
            CatalanNum[i] = CatalanNum[i-1] * (4 * i - 2) %mod * inv[i+1] %mod;
    }
    View Code

    3、卡特兰大数模板

    #include<bits/stdc++.h>
    using namespace std;
    const int C_maxn = 100 + 10;///项数
    
    int Catalan_Num[C_maxn][1000];///保存卡特兰大数、第二维为具体每个数位的值
    int NumLen[C_maxn];///每个大数的数长度、输出的时候需倒序输出
    
    void catalan() //求卡特兰数
    {
        int i, j, len, carry, temp;
        Catalan_Num[1][0] = NumLen[1] = 1;
        len = 1;
        for(i = 2; i < 100; i++)
        {
            for(j = 0; j < len; j++) //乘法
            Catalan_Num[i][j] = Catalan_Num[i-1][j]*(4*(i-1)+2);
            carry = 0;
            for(j = 0; j < len; j++) //处理相乘结果
            {
                temp = Catalan_Num[i][j] + carry;
                Catalan_Num[i][j] = temp % 10;
                carry = temp / 10;
            }
            while(carry) //进位处理
            {
                Catalan_Num[i][len++] = carry % 10;
                carry /= 10;
            }
            carry = 0;
            for(j = len-1; j >= 0; j--) //除法
            {
                temp = carry*10 + Catalan_Num[i][j];
                Catalan_Num[i][j] = temp/(i+1);
                carry = temp%(i+1);
            }
            while(!Catalan_Num[i][len-1]) //高位零处理
            len --;
            NumLen[i] = len;
        }
    }
    
    int main(void)
    {
        catalan();
        for(int i=1; i<=30; i++){
            for(int j=NumLen[i]-1; j>=0; j--){
                printf("%d", Catalan_Num[i][j]);
            }puts("");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    函数的调用-转载
    HTML常用标签-手打抄录-来自-烟雨飘零-拜谢
    CSS常用标签-手打抄录-感谢原未知博主-拜谢了
    JS函数表达的几种写法
    JS数组---转及补充--
    标准文档流特性-不含块级元素和行内元素
    块级元素和行内元素-标签收集-区别之处
    CSS盒子知识
    把应用push到/system/app上面后,出现java.lang.UnsatisfiedLinkError的问题
    Vysor:在电脑里控制你的安卓手机
  • 原文地址:https://www.cnblogs.com/qwertiLH/p/9468916.html
Copyright © 2020-2023  润新知