伯努利數
阿新 • • 發佈:2021-09-05
...
。
\[\begin{aligned}
\sum^{n-1}_{i=0}\binom{n}{i}B_{i}&=0\\
\sum^{n}_{i=0}\binom{n}{i}B_{i}&=B_{n}\\
\sum^{n}_{i=0}\frac{n!}{i!(n-i)!}B_{i}&=B_{n}\\
\sum^{n}_{i=0}\frac{B_{i}}{i!(n-i)!}&=\frac{B_{n}}{n!}\\
\end{aligned}
\] 的時候才成立,所以要手動修正 \(B_{0},B_{1}\) 的係數。
\[\begin{aligned}
B(x)&=e^xB(x)-x\\
B(x)&=\frac{x}{e^x-1}\\
\end{aligned}
\] 。
\[\begin{aligned}
&\frac{B'(x)}{x}(-1+\sum^{+\infty}_{i=0}\frac{n^ix^i}{i!})\\
&=B'(x)\sum^{+\infty}_{i=0}\frac{n^{i+1}x^i}{(i+1)!}\\
\end{aligned}
\]
定義&求解
設數列 \(B_{n}\) 為伯努利數,滿足一下性質:
\[\begin{aligned} B_{0}&=1\\ \sum^{n}_{i=0}\binom{n+1}{i}B_{i}&=0\\ \end{aligned} \]在 OI 中一般用這個來求 \(k\) 次方字首和。
顯然有一個 \(O(n^2)\) 的遞推式:
\[\begin{aligned} \binom{n+1}{n}B_{n}&=-\sum^{n-1}_{i=0}\binom{n+1}{i}B_{i}\\ B_{n}&=\frac{-\sum^{n-1}_{i=0}\binom{n+1}{i}B_{i}}{n+1} \end{aligned} \]實際上,可以利用生成函式來做到 \(O(n\log n)\)
如果我們令 \(B(x)\) 為其指數生成函式,那麼可以發現左邊實際上是捲上了一個 \(e^x\) 。
但是上面這個式子只當 \(n>1\)
直接套上一個多項式求逆就可以 \(O(n\log n)\) 的複雜度求出 \(B\) 了。
簡單應用
求 \(S_{k}(n)=\sum^{n}_{i=1}i^k\) 。
我們令 \(F(x)\) 為 \(S(n)\) 的指數生成函式。
\[\begin{aligned} F(x)&=\sum^{+\infty}_{i=0}\frac{x^iS_{i}(n)}{i!}\\ &=\sum^{+\infty}_{i=0}\frac{x^i\sum^{n}_{j=1}j^i}{i!}\\ &=\sum^{n}_{j=0}\sum^{+\infty}_{i=0}\frac{x^ij^i}{i!}\\ &=\sum^{n}_{j=1}e^{ix}\\ &=\frac{e^{(n+1)x}-e^x}{e^x-1}\\ &=\frac{B(x)e^x}{x}(e^{nx}-1)\\ &=\frac{B(x)e^x}{x}(-1+\sum^{+\infty}_{i=0}\frac{n^ix^i}{i!})\\ &=\frac{B(x)+x}{x}(-1+\sum^{+\infty}_{i=0}\frac{n^ix^i}{i!})\\ \end{aligned} \]為了方便,我們定義 \(B'(x)=B(x)+x\)
對於只要求第 \(k\) 項的時候,可以暴力卷積。
\[\begin{aligned} S_{k}(n)&=\sum^{k}_{i=0}\frac{B'_{i}n^{k-i+1}}{(k-i+1)!i!}\\ &=\frac{1}{(k+1)!}\sum^{k}_{i=0}\binom{k+1}{i}B'_{i}n^{k-i+1}\\ \end{aligned} \]至此,可以做到 \(O(k)\) 求出單項的值。 雖然有不用腦子,且複雜度差不多的插值法