卢卡斯定理裸题
忘输出回车wa了两发
#include<bits/stdc++.h> #define M 10007 using namespace std; int fac[10086],inv[10086]; int cal(int x) { int y=M-2,ans=1; while(y) { if(y&1)ans=ans*x%M; x=x*x%M; y>>=1; } return ans; } void pre() { fac[0]=1; for(int i=1;i<10007;i++) fac[i]=fac[i-1]*i%M; inv[0]=1; for(int i=1;i<10007;i++) inv[i]=inv[i-1]*cal(i)%M; } int C(int n,int m) { if(n<m) return 0; if(n<M&&m<M) return fac[n]*inv[m]%M*inv[n-m]%M; return C(n%M,m%M)*C(n/M,m/M)%M; } int main() { int T,a,b; scanf("%d",&T); pre(); while(T--) { scanf("%d%d",&a,&b); printf("%d\n",C(a,b)); } return 0; }