首页 > 代码库 > Uva 11609 - Team ( 组合数学 + 二项式性质 + 快速幂取模 )

Uva 11609 - Team ( 组合数学 + 二项式性质 + 快速幂取模 )

 

Uva 11609 - Team ( 组合数学 + 二项式性质 + 快速幂取模 )

 

题意:有N个人,选一个或多个人参加比赛,其中一名当队长,有多少种方案?(如果参赛者完全相同但是队长不同,也算是一种情况)[ 1<=n <= 10^9 ]

 

分析:这题要用到组合式公式的性质转化之后快速幂取模轻松搞定之

 

 

代码:
//Uva 11609 - Team /*    组合数公式 + 二项式系数性质 + 快速幂    手动自己推 -> F[n] = C(n,1)*1 + C(n,2)*2 + C(n,n)*n               -> F[n] = Σ((i*C(n,i))               -> F[n] = Σ(C(n,i)*C(i,1))               -> F[n] = n* Σ(c(n-1,i-1))               -> F[n] = n* 2^(n-1)     Σ(c(n-1,i-1))   1<= i <= n 所以是全集, == 2^(n-1) */#include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef unsigned long long ULL;#define MOD 1000000007ULL pow_mod(ULL a,ULL b){    ULL ans = 1;    while(b)    {        if(b & 1)    ans  =  ans * a % MOD;        a = (a%MOD) * (a%MOD) % MOD;        b >>= 1;    }    return ans;}void Orz(){    int cas = 1 , t;    ULL ans, n;    scanf("%d",&t);    while(t--)    {        scanf("%llu",&n);        printf("Case #%d: ",cas++);        printf("%llu\n",(pow_mod(2,n-1)*n) % MOD);    }    }int main(){    Orz();    return 0;}
代码君

 

Uva 11609 - Team ( 组合数学 + 二项式性质 + 快速幂取模 )