Cn,m % p ;
其中p必须是素数。
用法:
GetFact(p) ;
Lucas(n , m , p ) ;
LL fact[MAX];
void Getfact(LL p){
fact[0]=1;
for(int i=1;i<p;i++){
fact[i]=(fact[i-1]*i)%p;
}
}
LL qpow(LL a,LL n,LL p){
LL ans=1;
while(n){
if(n&1) ans=ans*a%p;
a=a*a%p;
n>>=1;
}
return ans;
}
LL Lucas(LL n,LL m,LL p){
LL ans=1;
while(n&&m){
LL a=n%p,b=m%p;
if(a<b) return 0;
ans=(ans*fact[a]*qpow(fact[b]*fact[(a-b)]%p,p-2,p))%p;
n/=p;
m/=p;
}
return ans;
}