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呢