Lucas定理

板子放在这里了

#include<bits/stdc++.h>
#define int long long
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define dec(i,x,y) for(register int i=x;i>=y;i--)
using namespace std;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;}int T,n,m,p;
inline int qpow(int a,int n){
    int s=1;while(n){if(n&1) s=(s*a)%p;a=(a*a)%p;n>>=1;}return s;}
inline int C(int n,int m){
    if(m>n) return 0;
    int a=1,b=1;
    rep(i,n-m+1,n) a=a*i%p;
    rep(i,2,m) b=b*i%p;
    return a*qpow(b,p-2)%p;}
inline int Lucas(int n,int m){
    if(!m) return 1;
    else return C(n%p,m%p)*Lucas(n/p,m/p)%p;}
signed main(){ 
    n=read(),m=read(),p=read();
    printf("%lld\n",Lucas(n,m));
    return 0;
}

 

但还有EXLucas呢

posted @ 2018-10-08 20:27  ASDIC减除  阅读(144)  评论(0编辑  收藏  举报