计算系数
先导
根据高中的数学知识二项式定理,我们可以得到
我们可以这样理解,比如这样一个式子,
如果我们要求的系数,那么我们想象成有个括号连续相乘,为了得到
我们需要从个括号中选出个来作为相乘的项,即
另外还剩下两个括号,我们选出个括号作为相乘的项,即
最后把这两个分散的项相乘得到
推广
那么进行推广我们可以得到
如果要求的系数
还是想象成有个括号连续相乘
从个括号中选出个凑成,即。
从剩下的个括号选出个凑出,即。
最后从剩下的个括号中选出个凑出,即
最后的最后把这些分散的项相乘就是最终的系数
(注意,我这里之所以要把外面带上括号,就是因为某些情况下,前面的系数可能不为1,这个时候还要把前面的系数也算上)
比如要求
有了上面的知识储备,下面的这道题一定就非常简单了
真题
给定一个多项式,请求出多项式展开后项的系数。
输入格式
共一行,包含 5 个整数,分别为 ,每两个整数之间用一个空格隔开。
输出格式
输出共 1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。
数据范围
输入样例:
1 1 3 1 2
输出样例:
3
题解
从连续的个括号中选出个作为凑成
从剩下的个括号中选出个凑成
最后答案
所以我们的代码只需要处理
,,还有组合数的计算就行
代码
#include <cmath>
#include <iostream>
using namespace std;
const int mod = 10007;
const int N = 1010;
int a, b, k, n, m;
int c[N][N];
void init() {
for (int i = 0; i <= 1000; i++)
for (int j = 0; j <= i; j++) {
if (j == 0)
c[i][j] = 1;
else
c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
}
}
int qmi(int a, int b) {
int ans = 1;
while (b) {
if (b & 1) ans = (long long)ans * a % mod;
a = (long long)a * a % mod;
b >>= 1;
}
return ans % mod;
}
int main() {
init(); //预处理出组合数
cin >> a >> b >> k >> n >> m;
cout << (long long)qmi(a, n) * qmi(b, m) * c[k][n] % mod;
return 0;
}
本文作者:邦的轩辕
本文链接:https://www.cnblogs.com/bangdexuanyuan/p/14396904.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步