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\) 真是有点难度,入门不容易而已

posted @ 2023-03-13 20:14  月神的使者  阅读(24)  评论(0编辑  收藏  举报