P1313 计算系数 [纯数学]
提示:因为markdown和\(\LaTeX\)使用的是懒加载,所以布局没有出来就请耐心等待
[NOIP2011 提高组] 计算系数 题目复制:
题目描述
给定一个多项式 \((by+ax)^k\),请求出多项式展开后 \(x^n\times y^m\) 项的系数。
输入格式
输入共一行,包含 \(5\) 个整数,分别为 \(a,b,k,n,m\),每两个整数之间用一个空格隔开。
输出格式
输出共一行,包含一个整数,表示所求的系数。
这个系数可能很大,输出对 \(10007\) 取模后的结果。
样例 #1
样例输入 #1
1 1 3 1 2
样例输出 #1
3
提示
【数据范围】
对于 \(30\%\) 的数据,有 $ 0\le k\le 10$。
对于 \(50\%\) 的数据,有 $ a=1\(,\)b=1$。
对于 \(100\%\) 的数据,有 \(0\le k\le 1000\),\(0\le n,m\le k\),\(n+m=k\),\(0\le a,b\le 10^6\)。
noip2011 提高组 day2 第 1 题。
本题的解题方式主要是依据二项式定理:
\[(x+y)^n = \binom{n}{0}{x^n}{y^2} + \binom{n}{1}{x^{n-1}}{y^1} + \binom{n}{2}{x^{n-2}}{y^2} + ...... + \binom{n}{n-1}{x^1}{y^{n-1}} + \binom{n}{n}{x^0}{y^n}
\]
其中每个 \(\binom{n}{k}\) 为一个称作二项式系数的特定正整数,其等于 \(\frac{n!}{k!(n-k)!}\) 。这个公式也称二项式公式或二项恒等式。使用求和符号,可以把它写作
\[(x+y)^n = \sum_{k=0}^{n}\binom{n}{k}{x^k}{y^{n-k}}
\]
直接模仿我刚学会的二项式定理,带入,可以得出:
\[{C^n_k}{a^n}{b^m}{x^n}{y^m}
\]
而组合数可以递推的求:
\[C^{m}_{n} = C^{m}_{n-1} + C^{m-1}_{n-1}
\]
直接模拟:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
// 快速幂,写模板
long long pow_fast(long long x, long long n) {
if(n==0) {
return 1;
}
long long t = pow_fast(x, n/2)%10007;
if(n&1) {
return t*t%10007*x%10007;
} else {
return t*t%10007;
}
}
// 存储递推后的组合数
long long c[1005][1005] = {};
int main() {
int a, b, k, n, m;
cin >> a >> b >> k >> n >> m;
// 初始化
c[0][0] = c[1][0] = c[1][1] = 1;
// 递推求组合数
for(int i=2; i<=k; i++) {
for(int j=0; j<=i; j++) {
if(j==0) {
c[i][j] = 1;
} else {
c[i][j] = (c[i-1][j]+c[i-1][j-1])%10007;
}
}
}
// 直接输出
cout << c[k][n]*pow_fast(a, n)%10007*pow_fast(b, m)%10007 << endl;
return 0;
}
练习 \(\LaTeX\) 真是有点难度,入门不容易而已
本文来自博客园,作者:月神的使者,转载请注明原文链接:https://www.cnblogs.com/dffxd/p/17212676.html