P1313 计算系数

题目描述

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

输入输出格式

输入格式:

 

输入文件名为factor.in。

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

 

输出格式:

 

输出共1 行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。

 

输入输出样例

输入样例#1:
1 1 3 1 2
输出样例#1:
3

说明

【数据范围】

对于30% 的数据,有 0 ≤k ≤10 ;

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

对于100%的数据,有 0 ≤k ≤1,000,0≤n, m ≤k ,且n + m = k ,0 ≤a ,b ≤1,000,000。

noip2011提高组day2第1题

题解:

杨辉三角求二项式系数

二项式定理 (a+b)^n=sigema(r=0--n)C(n r)*a^(n-r)*b^r

求x^n*y^m就是求 (a+b)^k的第(m+1)的系数,但是题目是(ax+by)^k,求x^n*y^m,就在原来杨辉三角求出的系数的基础上乘上a^n*b^m

自己写几个公式推推就能发现。

代码

#include<iostream>
#include<cstdio>
#define mod 10007
using namespace std;
int a,b,k,n,m,c[1010][1010];
long long mul(int x,int y){
    long long now=x,ans=1;
    while(y){
        if(y&1)ans=ans*now%mod;
        now=now*now%mod;
        y>>=1;
    }
    return ans;
}
int main(){
    scanf("%d%d%d%d%d",&a,&b,&k,&n,&m);
    c[0][0]=1;
    for(int i=1;i<=k;i++){
        for(int j=0;j<=i;j++){
            if(j==0)c[i][j]=1;
            else if(j==i)c[i][j]=1;else
            c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
        }
    }
    cout<<c[k][m]*mul(a,n)%mod*mul(b,m)%mod;
    return 0;
}
原文地址:https://www.cnblogs.com/zzyh/p/7491102.html