跳转至

卢卡斯定理

#include<bits/stdc++.h>
#define Maxn 10000
#define Mod 13331
using namespace std;
int fac[Maxn+5];
int exgcd(int a,int b,int &x,int &y)
{
    int d=a;
    if(b==0)
    {
        x=1;
        y=0;
    }
    else
    {
        d=exgcd(b,a%b,x,y);
        x-=a/b*y;
        swap(x,y);
    }
    return d;
}
int inv(int b,int M)
{
    int x,y;
    int d=exgcd(b,M,x,y);
    return (x%M+M)%M;
}
int C(int x,int y)
{
    if(x<y) return 0;
    return 1ll*fac[x]*inv(fac[x-y],Mod)%Mod*inv(fac[y],Mod)%Mod;
}
int lucas(int x,int y)
{
    if(y==0) return 1;
    return 1ll*lucas(x/Mod,y/Mod)*C(x%Mod,y%Mod)%Mod;
}
int main()
{
    fac[0]=1;
    for(int i=1;i<=Maxn;i++) fac[i]=fac[i-1]*i;
}