Lucas 定理模板题
【代码】
#include <cstdio>
#include <iostream>
#include <algorithm>
#define N 10007
#define mod 10007
#define INF 0x7fffffff
using namespace std;
typedef long long ll;
ll read()
{
ll 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-'0';ch=getchar();}
return x*f;
}
int n,m,T;
int Fac[N];
int Qpow(int x,int y)
{
int rtn=1;
while(y) {
if(y&1) rtn=rtn*x%mod;
x=x*x%mod;y>>=1;
}
return rtn;
}
int C(int x,int y){
return Fac[x]*Qpow(Fac[y],mod-2)%mod*Qpow(Fac[x-y],mod-2)%mod;
}
int Lucas(int x,int y)
{
if(x<y) return 0;
if(x<mod&&y<mod) return C(x,y);
return Lucas(x/mod,y/mod)*Lucas(x%mod,y%mod)%mod;
}
int main()
{
T=read();Fac[0]=1;
for(int i=1;i<mod;i++) Fac[i]=Fac[i-1]*i%mod;
while(T--)
{
n=read(),m=read();
printf("%d\n",Lucas(n,m));
}
return 0;
}