luogu1313计算系数题解--二项式定理
Posted rye-catcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu1313计算系数题解--二项式定理相关的知识,希望对你有一定的参考价值。
题目链接
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 imes a^n imes b^m),于是直接快速幂,然后按公式(C^k_n=frac {n!}{(n-k)! imes k!}),化成(prod_{i=k+1}^{i<=n} i imes ((n-k)!)^{-1})
代码
#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(){
/*ans=a^n*b^m*C(n,k)*/
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
",ans);
return 0;
}
以上是关于luogu1313计算系数题解--二项式定理的主要内容,如果未能解决你的问题,请参考以下文章