组合数学 卢卡斯((color{white}{Greencas}))定理 容斥定理 (huge{Catalan数}) 矩阵

组合数学
卢卡斯((color{white}{Greencas}))定理
容斥定理
(huge{Catalan数})
矩阵

最基础的:
(C^{m}_{n}=frac{n!}{m!(n-m)!})
他的逆元算法是:
因为阶乘是(fac[i]=fac[i-1]*i)
所以阶乘逆元是(invfac[n]=fac[n]^{p-2})
=>(invfac[i-1]=invfac[i]*i)

于是(color{#00CCFF}{C^{m}_{n}=fac[n]*invfac[n-m]%p*invfac[m]%p})

若将(C^{m}_{n})分行我们就得到了伟大的杨辉Triangle!
组合数学
卢卡斯((color{white}{Greencas}))定理
容斥定理
(huge{Catalan数})
矩阵

(C^{m}_{n}=C^{ndiv p}_{mdiv p}*C^{n%p}_{m%p}),p仍然还是质数

ll C(ll n,ll m)
{
    if(n<m)return 0;
    return (fac[n]*inv(fac[m]))%p*inv(fac[n-m])%p;
}
ll lucas(ll n,ll m)
{
    if(!m)return 1;
    return lucas( c(n/p,m/p),c(n%p,m%p) );
}

容斥定理

(Ans=所有方案-不满足其中1个+不满足其中2个......+(-1)^n*不满足其中n个)
例子:
错排问题:n把钥匙开n把锁,随机分配,全都打不开概率多少
胡乱分析:
我们有:1不在1,2不在2......n不在n
于是
(huge{Sigma^{n}_{k=0} (-1)^k*Cn^k*A^{n-k}_{n-k}})
-----------------------------------------------------------------------------------------------------------------------

(huge{Catalan数})

可解:
进栈顺序、对角线划分方案数、二叉树形态
Catalan的推导方式为:
(h(n)=h(0)*h(n-1)+h(1)+h(n-2)......+h(n-1)*h(0))
其中(h(0)=1,h(1)=1)
又有另一种写法:
(h(n)=C^{n}_{2n} div (n+1))
前七项为:
(huge{color {red}{1,1,2,5,14,42,132}})

矩阵

矩阵乘法:
A为mn的矩阵,B为np矩阵,他们乘积C为m*p矩阵
(c_{i,j}=a_{i,1}b_{1,j}+a_{i,2}b_{2,j}+······+a_{i,n}b{n,j}=Sigma ^{n}_{r=1} a_i,b_{r,j})

struct martix{
    ll a[4][4],n,m;
}
martix multiply(martix a,martix b)
{
    martix ret;
    ret.n=a.n,ret.m=b.m;
    for(int i=1;i<=a.n;i++)
    {
        for(int j=1;j<=b.m;j++)
        {
            ret.a[i][j]=0;
            for(int k=1;k<=a.m;k++)
            {
                ret.a[i][j]+=a.a[i][k]*b.a[k][j];
                ret.a[i][j]%=mod;
            }
        }
    }
    return ret;
}