P1313 [NOIP2011 提高组] 计算系数——二项式定理

[NOIP2011 提高组] 计算系数

题目描述

给定一个多项式 ( b y + a x ) k (by+ax)^k (by+ax)k,请求出多项式展开后 x n × y m x^n\times y^m xn×ym 项的系数。

输入格式

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

输出格式

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

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

样例 #1

样例输入 #1

1 1 3 1 2

样例输出 #1

3

提示

【数据范围】

对于 30 % 30\% 30% 的数据,有 0 ≤ k ≤ 10 0\le k\le 10 0k10

对于 50 % 50\% 50% 的数据,有 a = 1 a=1 a=1 b = 1 b=1 b=1

对于 100 % 100\% 100% 的数据,有 0 ≤ k ≤ 1000 0\le k\le 1000 0k1000 0 ≤ n , m ≤ k 0\le n,m\le k 0n,mk n + m = k n+m=k n+m=k 0 ≤ a , b ≤ 1 0 6 0\le a,b\le 10^6 0a,b106

noip2011 提高组 day2 第 1 题。

思路

读到 ( b y + a x ) k (by+ax)^k (by+ax)k 这句话是,不知道各位有没有一种莫名的 “亲切感” “亲切感” 亲切感,没错,他就是著名的二项式定理。那到底什么是二项式定理呢?

我们都知道, ( a + b ) 2 (a+b)^2 (a+b)2 = a 2 a^2 a2+ b 2 b^2 b2 + 2 a b 2ab 2ab 可这个公式是怎么得来的呢?这就要说到 二项式定理 了,在说二项式定理之前,我们先要了解一下 排列组合

排列组合

排列:

我们通常用 A n m A_{n}^{m} Anm 来表示排列,表示从 n n n个物体中 有顺序的选取 m m m(也就是选取第1、2、3个和选取第2、1、3个属于两种情况),此外规定 0!= 1,计算公式如下:
在这里插入图片描述

组合:

我们用 C n m C_{n}^{m} Cnm 来表示组合,表示从 n n n个物体中 无顺序的选取 m m m (也就是选取第1、2、3个和选取第2、1、3个属于同一种情况),此外规定 0!= 1,计算公式如下:
在这里插入图片描述

初步了解排列组合之后,我们回归正传,来看二项式定理:

二项式定理

二项式定理,又称牛顿二项式定理,由艾萨克·牛顿于1664年、1665年间提出。该定理给出两个数之和的整数次幂诸如展开为类似项之和的恒等
式。二项式定理可以推广到任意实数次幂,即广义二项式定理 。

看这段话的话可能有些难以理解,总体来讲,就是用来求 ( x + y ) n (x+y)^n (x+y)n 的公式:
在这里插入图片描述
其中,在这里插入图片描述表示在这里插入图片描述 C k n C_{k}^{n} Ckn
也可把它写成在这里插入图片描述

举个例子:

( 2 + 3 ) 3 (2+3)^3 (2+3)3 = C 3 0 C_{3}^{0} C30 × \times × 2 3 2^3 23 × \times × 3 0 3^0 30 + C 3 1 C_{3}^{1} C31 × \times × 2 2 2^2 22 × \times × 3 1 3^1 31 + C 3 2 C_{3}^{2} C32 × \times × 2 1 2^1 21 × \times × 3 2 3^2 32 + C 3 3 C_{3}^{3} C33 × \times × 2 0 2^0 20 × \times × 3 3 3^3 33
= 1 × 8 × 1 1\times8\times1 1×8×1 + 3 × 4 × 3 3\times4\times3 3×4×3 + 3 × 2 × 9 3\times2\times9 3×2×9 + 1 × 1 × 27 1\times1\times27 1×1×27
= 8 + 36 + 54 + 27 8 + 36 + 54 + 27 8+36+54+27
= 125

解题方法

由于题目希望求出多项式 ( b y + a x ) k (by + ax) ^ k (by+ax)k,展开后的多项式 x n × y n x^n\times y^n xn×yn的系数,我们可以通过 二项式定理来进行推导:

A A A = b y by by B B B = a x ax ax m m m = k − n k-n kn
通过二项式定理并由 ( b y + a x ) k (by + ax) ^ k (by+ax)k
( b y + a x ) k (by + ax) ^ k (by+ax)k = C k 0 × A k × B 0 C_{k}^{0}\times A^k\times B^0 Ck0×Ak×B0 + C k 1 × A k − 1 × B 1 C_{k}^{1}\times A^{k-1} \times B^1 Ck1×Ak1×B1 + …… + C k n × A m × B n C_{k}^{n}\times A^m \times B^n Ckn×Am×Bn + …… + C k k × A 0 × B k C_{k}^{k}\times A^0 \times B^k Ckk×A0×Bk
= C k 0 × b k y k × a 0 x 0 C_{k}^{0}\times b^ky^k\times a^0x^0 Ck0×bkyk×a0x0 + C k 1 × b k − 1 y k − 1 × a 1 x 1 C_{k}^{1}\times b^{k-1}y^{k-1}\times a^1x^1 Ck1×bk1yk1×a1x1 + …… + C k n × b m y m × a n x n C_{k}^{n}\times b^my^m\times a^nx^n Ckn×bmym×anxn + …… + C k k × b 0 y 0 × a k x k C_{k}^{k}\times b^0y^0\times a^kx^k Ckk×b0y0×akxk
= C k 0 × a 0 × b k C_{k}^{0}\times a^0\times b^k Ck0×a0×bk × x 0 × y k \times x^0\times y^k ×x0×yk + …… + C k n × a n × b m C_{k}^{n}\times a^n\times b^m Ckn×an×bm × x n × y m \times x^n\times y^m ×xn×ym + …… + C k 0 × a k × b 0 C_{k}^{0}\times a^k\times b^0 Ck0×ak×b0 × x k × y 0 \times x^k\times y^0 ×xk×y0

标黄的部分为多项式的系数

#include <bits/stdc++.h>
using namespace std;
const int M = 10007;
long long c[1005][1005];
long long pow(long long x, long long y){//快速幂,快速求出x^y 
	if(y == 0){
		return 1;
	}
	long long tmp = pow(x, y / 2) % M;
	if(y % 2 == 0){
		return tmp%M * tmp%M;
	} else {
		return tmp * tmp % M * x;
	}
}
int main(){
	long long 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]) % M;
			}
		}
	}
	cout << c[k][n] * pow(a, n) % M * pow(b, m) % M;	 
	return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值