输入p时,预处理所有n!的模p的余数,即调用init(p);
LL f[maxn];
void init(LL p)
{
LL i;
f[0]=1;
for(i=1;i<=p;i++){
f[i]=f[i-1]*i%p;
}
}
LL powmod(LL a,LL b,LL p) {
LL res=1;
while(b!=0){
if(b&1) res=(res*a)%p;
a=(a*a)%p;
b>>=1;
}
return
res;
}
LL Lucas(LL n,LL m,LL p)
{
LL ans=1;
while(n&&m){
LL nn=n%p,mm=m%p;
if(nn<mm) return 0;
ans=ans*f[nn]*powmod(f[mm]*f[nn-mm]%p,p-2,p)%p;
n/=p;
m/=p;
}
return ans;
}