题目链接
https://www.luogu.org/problemnew/show/P1313
分析
二项式定理
$(a+b)^n=\sum_{k=0}^{n}{C^k_n a^k b^{n-k} }$
于是我们要求的即是$C^k_n \times a^n \times b^m$,于是直接快速幂,然后按公式$C^k_n=\frac {n!}{(n-k)! \times k!}$,化成$\prod_{i=k+1}^{i<=n} i \times ((n-k)!)^{-1}$
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <algorithm> #include <cctype> #define ll long long #define ri register int using std::min; using std::max; template <class T>inline void read(T &x){ x=0;int ne=0;char c; while(!isdigit(c=getchar()))ne=c=='-'; x=c-48; while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48; x=ne?-x:x;return ; } const ll p=10007; int n,m,k,a,b; inline ll ksm(ll a,ll c){ ll ans=1; while(c){ if(c&1)ans=ans*a%p; a=a*a%p; c=c>>1; } return ans; } ll fermat(ll a){ return ksm(a,p-2); } int main(){ ll ans=1; read(a),read(b),read(k),read(n),read(m); ans=ksm(a,n)*ksm(b,m)%p; for(ri i=k;i>n;i--)ans=ans*i%p; ll tmp=1; for(ri i=k-n;i>=2;i--)tmp=tmp*i%p; ans=ans*fermat(tmp)%p; printf("%lld\n",ans); return 0; }
|