zl程序教程

您现在的位置是:首页 >  其他

当前栏目

P1313 计算系数 [纯数学]

2023-04-18 15:50:48 时间

提示:因为markdown和(LaTeX)使用的是懒加载,所以布局没有出来就请耐心等待

[NOIP2011 提高组] 计算系数 题目复制:

题目描述

给定一个多项式 ((by+ax)^k),请求出多项式展开后 (x^n imes y^m) 项的系数。

输入格式

输入共一行,包含 (5) 个整数,分别为 (a,b,k,n,m),每两个整数之间用一个空格隔开。

输出格式

输出共一行,包含一个整数,表示所求的系数。

这个系数可能很大,输出对 (10007) 取模后的结果。

样例 #1

样例输入 #1

1 1 3 1 2

样例输出 #1

3

提示

【数据范围】

对于 (30\%) 的数据,有 $ 0le kle 10$。

对于 (50\%) 的数据,有 $ a=1(,)b=1$。

对于 (100\%) 的数据,有 (0le kle 1000)(0le n,mle k)(n+m=k)(0le a,ble 10^6)

noip2011 提高组 day2 第 1 题。

本题的解题方式主要是依据二项式定理:

[(x+y)^n = inom{n}{0}{x^n}{y^2} + inom{n}{1}{x^{n-1}}{y^1} + inom{n}{2}{x^{n-2}}{y^2} + ...... + inom{n}{n-1}{x^1}{y^{n-1}} + inom{n}{n}{x^0}{y^n} ]

其中每个 (inom{n}{k}) 为一个称作二项式系数的特定正整数,其等于 (frac{n!}{k!(n-k)!}) 。这个公式也称二项式公式或二项恒等式。使用求和符号,可以把它写作

[(x+y)^n = sum_{k=0}^{n}inom{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) 真是有点难度,入门不容易而已