[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
 2 #include
 3 #include
 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(xreturn 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 }

 

你可能感兴趣的:([BZOJ2982]combination Lucas定理)