[BZOJ2982]combination Lucas定理
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2982
C(N,M)%P=C(N%P,M%P)∗C(N/P,M/P)%P
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int mod=1e4+7; 6 int inv[10010],fac[10010]; 7 int C(int x,int y){ 8 if(x<y) return 0; 9 return fac[x]*inv[fac[y]]%mod*inv[fac[x-y]]%mod; 10 } 11 int main(){ 12 inv[1]=1;for(int i=2;i<10007;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; 13 fac[0]=1;for(int i=1;i<10007;i++) fac[i]=fac[i-1]*i%mod; 14 int Test; 15 scanf("%d",&Test); 16 while(Test--){ 17 int N,M; 18 scanf("%d%d",&N,&M); 19 if(N<M){ 20 puts("0"); 21 continue; 22 } 23 int Ans=1; 24 while(M){ 25 Ans=Ans*C(N%mod,M%mod)%mod; 26 N/=mod; 27 M/=mod; 28 } 29 printf("%d\n",Ans); 30 } 31 return 0; 32 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步