题目描述
题解
lucas定理裸题。
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define Mod 10007
int T,n,m,ans;
int mul[Mod+1];
void calc()
{
mul[0]=1;
for (int i=1;i<=Mod;++i)
mul[i]=mul[i-1]*i%Mod;
}
int fast_pow(int a,int p)
{
int ans=1;
for (;p;p>>=1,a=a*a%Mod)
if (p&1)
ans=ans*a%Mod;
return ans;
}
int C(int n,int m)
{
if (m>n) return 0;
return mul[n]*fast_pow(mul[m]*mul[n-m]%Mod,Mod-2)%Mod;
}
int lucas(int n,int m)
{
int ans=1;
for (;m;n/=Mod,m/=Mod)
ans=ans*C(n%Mod,m%Mod)%Mod;
return ans;
}
int main()
{
calc();
scanf("%d",&T);
while (T--)
{
scanf("%d%d",&n,&m);
ans=lucas(n,m);
printf("%d\n",ans);
}
}