题目大意 给定一个正整数 (n),请求出所有小于 (n) 人的团队如果选出一个人作为队长的不同的方案数(假定这些人两两不相同)对 (10^9+7)取模的结果。
分析 即求
[sum^n_{k=1}kC_n^k=sum_{k=1}^n kfrac{n!}{k!(n-k)!}=sum_{k=1}^nnfrac{(n-1)!}{(k-1)!(n-k)!}=nsum_{k=1}^n C_{n-1}^{k-1}=n2^{n-1}
]
快速幂即可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1E+9 + 7;
int T;
ll n;
ll QuickPow(ll a, ll b, ll mod)
{
ll res = 1;
a %= mod;
while(b) {
if(b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
int main()
{
scanf("%d", &T);
int t = 0;
while(++t <= T) {
scanf("%d", &n);
printf("Case #%d: %lld
", t, n * QuickPow(2, n - 1, mod) % mod);
}
}