P1313 计算系数
//Pro:NOIP 2011 P1313 计算系数 //可以用杨辉三角来推 //但是,在这儿给出一个比较麻烦的解法:) //锻炼数学技巧233 //sol: //由二项式定理推出系数,当然了暴力乘的话肯定会炸的,而且不能取模 //所以,把分子和分母上的数存下来,进行质因数分解约分 //质因数分解的话,先筛个素数 //然后再做除法 //然后让系数乘上x的系数a的n次方再乘上y的系数b的m次方 //快速幂搞 #include<iostream> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int N=1e3+5; const int mod=10007; int a,b,k,n,m; bool flag; bool nprime[N]; int prime[N],cnt; void init() { nprime[1]=1; for(int i=2;i<N;++i) { if(!nprime[i]) prime[++cnt]=i; for(int j=1,d;j<=cnt&&(d=prime[j]*i)<N;++j) { nprime[d]=1; if(i%prime[j]==0) break; } } } int p[2][N]; void fenjie(int num,int id) { for(int i=1;i<=cnt&&num!=1;++i) { while(num%prime[i]==0) { ++p[id][prime[i]]; num/=prime[i]; } } if(num!=1) ++p[id][num]; } long long ksm(long long x,int k) { long long res=1; while(k) { if(k&1) { (res*=1ll*x)%=mod; } x*=x,x%=mod; k>>=1; } return res; } long long fenmu; int main() { init(); scanf("%d%d%d%d%d",&a,&b,&k,&n,&m); if(n>m) { swap(n,m); flag=1; } for(int i=m+1;i<=k;++i) fenjie(i,0); for(int i=2;i<=n;++i) fenjie(i,1); for(int i=2;i<=k;++i) { p[0][i]-=p[1][i]; } fenmu=1; for(int i=2;i<=k;++i) { if(p[0][i]) { (fenmu*=ksm(i,p[0][i]))%=mod; } } if(flag) swap(n,m); (fenmu*=ksm(a,n))%=mod; (fenmu*=ksm(b,m))%=mod; printf("%lld",fenmu); return 0; }