计算组合数Σ(i=0,n)i*C(n,i)

题目:

组合数学中恒等式的证明:1、Σ(i=0,n)i^2*C(n,i)=n*(n+1)*2^(n-2);
还有一个:Σ(i=0,n)(1/(i+1)(i+2))C(n,i)=(2^(n+2)-n-3)/((n+1)(n+2))麻烦给出详解,

解答:

第一个,利用 (1+x)^n=Σ(i=0,n) C(n,i)*x^i,两边对x求导,得:
n*(1+x)^(n-1)=Σ(i=1,n) i*C(n,i)*x^(i-1).两边同乘以x,得:
n*x*(1+x)^(n-1)=Σ(i=1,n) i*C(n,i)*x^i.两边再对x求导,得:
n*(1+x)^(n-1)+n*x*(n-1)*(1+x)^(n-2)=Σ(i=1,n) i^2*C(n,i)*x^(i-1).令x=1,整理,得证.
第二个,利用 A:Σ(i=0,n) C(n,i)=2^n 和 B:Σ(i=1,n) i*C(n,i)=n*2^(n-1).
左式=Σ(i=0,n) (1/(i+1)-1/(i+2))*C(n,i)
=(1-1/2)*C(n,0)+(1/2-1/3)*C(n,1)+(1/3-1/4)*C(n,2)+...+(1/n-1/(n+1))*C(n,n-1)+(1/(n+1)-1/(n+2))*C(n,n)
=C(n,0)-(1/(n+2))*C(n,n)+(1/2)*(C(n,1)-C(n,0))+(1/3)*(C(n,2)-C(n,1))+...+(1/(n+1))*(C(n,n)-(n,n-1))
=1-1/(n+2)+Σ(i=1,n) (1/(i+1))*(C(n,i)-C(n,i-1))
=(n+1)/(n+2)+Σ (1/(i+1))*(n!/ (i!*(n-i)!) - n!/ ((i-1)!*(n-i+1)!))
=(n+1)/(n+2)+Σ (1/(i+1))*((n-i-1-i)*n!) / (i!*(n-i+1)!)
=(n+1)/(n+2)+Σ ((n-2*i+1)/(n+1)*(n+2))*((n+2)!/ ((i+1)!*(n-i+1)!))
=(n+1)/(n+2)+1/((n+1)(n+2)) Σ (n+3-2*i-2)*C(n+2,i+1)
=(n+1)/(n+2)+(n+3)/((n+1)*(n+2)) Σ C(n+2,i+1) - 2/((n+1)*(n+2)) Σ (i+1)*C(n+2,i+1)
利用A化简第二项
=(n+1)/(n+2)+((n+3)*(2^(n+2)-n-4)) / ((n+1)*(n+2)) - 2/((n+1)*(n+2)) Σ(i=2,n+1) i*C(n+2,i)
利用B化简第三项
=(n+1)/(n+2)+((n+3)*(2^(n+2)-n-4))/((n+1)*(n+2)) - (2*((n+2)*2^(n+1)-2*n-4)) / ((n+1)*(n+2))
然后化简一下,就得证啦.

计算组合数Σ(i=0,n)i*C(n,i)_第1张图片

对于本道题目,就是图中方框的时候就可以让x=1了,因为不需要得到i^2这个系数,

容易得到Σ(i=0,n)i*C(n,i)=n*2^(n-1),如果是算法题可以对2^(n-1)使用快速幂

#include

using namespace std;
int mm=1000000007;
int main()
{
    int n;
    cin>>n;
    int m=n-1;
    long long a=2,res=1;
    while(m)
    {
        if (m&1) res=res*a%mm;
        a=a*a%mm;
        m=m>>1;
    }
    res=res*n%mm;
    cout<

 

你可能感兴趣的:(算法,C++)