P1313 计算系数

来源:互联网 发布:day one windows 编辑:程序博客网 时间:2024/04/29 09:35

题目描述

给定一个多项式(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题


1.二项式定理 

#include<iostream>using namespace std;typedef long long ll;ll c[1005],a,b,k,n,m;ll mod(ll n,ll k,ll m){    if(k==0)return 1;    ll x=mod(n,k/2,m);    ll ans=x*x%10007;    if(k%2)ans=ans*n%10007;    return ans;}int main(){    cin>>a>>b>>k>>n>>m;    c[0]=1;    for(int i=1;i<=k;i++)    {       long long last=c[i-1];        if(last==0)last=10007;        while(last*(k-i+1)%i)last+=10007;        c[i]=last*(k-i+1)/i%10007;    }    cout<<c[m]*mod(a,n,10007)*mod(b,m,10007)%10007;    return 0;}
2.杨辉三角
#include<iostream>using namespace std;typedef long long ll;ll c[1005][1005],a,b,k,n,m;ll mod(ll n,ll k,ll m){    if(k==0)return 1;    ll x=mod(n,k/2,m);    ll ans=x*x%10007;    if(k%2)ans=ans*n%10007;    return ans;}int main(){    cin>>a>>b>>k>>n>>m;    for(int i=0;i<=k;i++)    {        c[i][0]=1;        for(int j=1;j<=i;j++)          c[i][j]=(c[i-1][j-1]+c[i-1][j])%10007;    }    cout<<c[k][m]*mod(a,n,10007)*mod(b,m,10007)%10007;    return 0;}



0 0
原创粉丝点击