UVA 11609 (組合數學)
阿新 • • 發佈:2019-02-04
題意:求sigma(i*C(n, i)).
因為i*C(n, i) = i*n*(n-1)*...*(n-i+1)/i! = n*(n-1)*...*(n-2+1)/(i-1)! = (n-i+1)*C(n, i-1),
所以(i-1)*C(n,i-1)+i*C(n, i) = n*C(n, i-1),所以這個求和式的沒兩項都能合併,提出一個
n的公約數後,最後就是n*[C(n,0)+C(n,2)+C(n,4)+...] = n*2^(n-1).奇偶的情況是一樣
的都是這個結果.
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> using namespace std; const long long mod = 1e9+7; long long n; long long qpow (long long a, long long b) { if (b == 0) return 1; long long ans = qpow (a, b>>1); ans = ans*ans % mod; if (b&1) ans = ans*a%mod; return ans; } int main () { int t, kase = 0; cin >> t; while (t--) { cin >> n; printf ("Case #%d: ", ++kase); cout << (n*qpow (2, n-1))%mod << endl; } return 0; }