计算系数(组合数)
计算系数
给定一个多项式(ax+by)k,请求出多项式展开后xnym项的系数。
输入格式
共一行,包含 5 个整数,分别为 a,b,k,n,m,每两个整数之间用一个空格隔开。
输出格式
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。
数据范围
0≤n,m≤k≤1000,
n+m=k,
0≤a,b≤106
输入样例:
1 1 3 1 2
输出样例:
3
算法分析
考察组合数的问题xnym 的系数是 Ckn anbm.Ckn=k! / n! *(k-n)!.
代码实现
#include <iostream>
#include <algorithm>
using namespace std;
const int mod = 10007;
int qmi(int a, int k)
{
a %= mod;
int res = 1;
while (k)
{
if (k & 1) res = res * a % mod;
a = a * a % mod;
k >>= 1;
}
return res;
}
int main()
{
int a, b, k, n, m;
cin >> a >> b >> k >> n >> m;
int res = qmi(a, n) * qmi(b, m) % mod;//每一项都有a,b
for (int i = 1, j = k; i <= n; i ++, j -- )//计算组合数
{
res = res * j % mod;
res = res * qmi(i, mod - 2) % mod;//逆元相当于除法
}
cout << res << endl;
return 0;
}