您的位置:首页 > 其它

hdu 3037

2015-11-09 21:31 267 查看
收一份长得还行的模板

#include<iostream>
#include<cstdio>
using namespace std;

__int64 jc[100010];

__int64 exgcd(__int64 a,__int64 b,__int64 &x,__int64 &y){
if(b==0)    return x=1,y=0,a;
__int64 res=exgcd(b,a%b,y,x);
y-=a/b*x;
return res;
}

__int64 Inv(__int64 a,__int64 mod){
__int64 x,y;
exgcd(a,mod,x,y);
return (x%mod+mod)%mod;
}

__int64 C(__int64 n,__int64 m,__int64 mod){
if(m>n) return 0;
__int64 ret= jc
;
ret*= Inv((jc[m]*jc[n-m])%mod,mod);
return ret%mod;
}
__int64 Lucas(__int64 n,__int64 m,__int64 mod){
if(m==0)    return 1;
return C(n%mod,m%mod,mod)*Lucas(n/mod,m/mod,mod)%mod;
}

int main()
{
int i,j,k,N,M,n,mod,T;

scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&N,&M,&mod);
for(jc[0]=1,i=1;i<=mod;i++)  jc[i]=jc[i-1]*i%mod;
printf("%I64d\n",Lucas(N+M,N,mod));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: