Win10系統使用Gitblit搭建區域網Git伺服器
阿新 • • 發佈:2020-09-06
前言
多寫寫數學題的題解,說不定就會了呢qwq
題目
講解
就單純推式子
首先我們要先證明一個性質:
\[\sum_{i=0}^n i*C_n^i=n*2^{n-1} \]
令
\[S=\sum_{i=0}^n i*C_n^i \]
則
\[\begin{aligned} 2S&=\sum_{i=0}^n i*C_n^i+\sum_{i=0}^n (n-i)*C_n^{n-i}\\ &=\sum_{i=0}^n i*C_n^i+\sum_{i=0}^n (n-i)*C_n^i\\ &=\sum_{i=0}^n n*C_n^i\\ &=n*\sum_{i=0}^n C_n^i\\ &=n*2^n \end{aligned}\]
所以
\[S=n*2^{n-1} \]
然後我們就可以愉快地推式子啦
\[\begin{aligned} F(n)&=\sum_{i=1}^n i*\sum_{j=i}^n C_{j}^{i}\\ &=\sum_{i=1}^n \sum_{j=1}^i j*C_i^j\\ &=\sum_{i=1}^n i*2^{i-1}\\ &=\sum_{i=0}^{n-1} (i+1)*2^{i} \end{aligned}\]
類似的,我們求出\(2F(n)\)
\[2F(n)=\sum_{i=1}^n i*2^i \]
作差即可得到:
\[\begin{aligned} F(n)&=n*2^n-\sum_{i=0}^{n-1}2^i\\ &=n*2^n-(2^n-1)\\ &=(n-1)*2^n+1 \end{aligned}\]
快速冪實現即可
程式碼
int qpow(LL x,LL y,int MOD) { LL ret = 1;y %= (MOD-1); while(y){if(y & 1) ret = ret * x % MOD;x = x * x % MOD;y >>= 1;} return ret; } int main() { // freopen(".in","r",stdin); // freopen(".out","w",stdout); while(~scanf("%lld",&n)) Put(((n-1) % MOD * qpow(2,n,MOD) + 1) % MOD,'\n'); return 0; }