计算系数
题目
解析
要做这题,我们需要二项式定理,它的式子是这样的:
(
a
+
b
)
n
=
∑
i
=
0
n
C
n
i
a
n
−
i
b
i
(a+b)^n=\sum_{i=0}^nC_n^ia^{n-i}b^i
(a+b)n=i=0∑nCnian−ibi
证明咕了,请读者自己尝试利用
C
n
−
1
k
+
C
n
−
1
k
−
1
=
C
n
k
C_{n-1}^k+C_{n-1}^{k-1}=C_n^k
Cn−1k+Cn−1k−1=Cnk证明
下图拷贝自来自百度百科):
有了这个公式,发现数据范围很小,且10007是质数,直接费马小定理爆算
C
k
m
C_k^m
Ckm即可
最后答案即为
C
k
m
a
n
b
m
C_k^ma^nb^m
Ckmanbm
code:
#include<cstdio>
#define int long long
#define rr register int
using namespace std;
const int mod=10007;
inline int pow(int x,int y)
{
rr res=1;
while(y){if(y&1)res=res*x%mod;x=x*x%mod,y>>=1;}
return res;
}
int a,b,k,n,m,ans;
signed main()
{
scanf("%lld%lld%lld%lld%lld",&a,&b,&k,&n,&m),ans=pow(a,n)*pow(b,m)%mod;
for(rr i=m+1;i<=k;++i)ans=ans*i%mod;
for(rr i=2;i<=k-m;++i)ans=ans*pow(i,mod-2)%mod;
printf("%lld",ans);
return 0;
}