BZOJ2982: combination

来源:互联网 发布:mac删除launchpad图标 编辑:程序博客网 时间:2024/05/18 00:19

BZOJ2982

Lucas定理模板题

【代码】

#include <cstdio>#include <iostream>#include <algorithm>#define N 10007#define mod 10007#define INF 0x7fffffffusing 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;}
原创粉丝点击