hotmanの備忘録とライブラリ置き場.

【競技プログラミング】形式的冪級数(多項式)を係数倍するテク

はじめに

https://twitter.com/hotmanww/status/1309050292277784577

これが解けるようになります。

形式的冪級数(多項式)を係数倍するテク

\sum_{n=0}^{\infty}\frac{1}{n!}z^n=e^zと言うのは有名な式ですよね
では\sum_{n=0}^{\infty}\frac{n^a}{n!}z^nは何でしょうかと言うのが今回の議題です。
これがわかればzbを代入することで答えを求めることが出来ます。

結論:微分して z 倍する。

\frac{dz^n}{dz}\times z=nz^nなので、うまくいきます。
これをオイラー作用素等と呼ばれたりもするようです。
今回の場合、
\sum_{n=0}^{\infty}\frac{n^a}{n!}z^n
a=0の時e^z
a=1の時(e^z)'\times z=(z^2+z)e^z
a=2の時((z^2+z)e^z)'\times z=(z^3+3z^2+z)e^z
と続いて行きます
この漸化式を整理するとf_{i+1}(z)=f_i(z)+f_i'(z)のような式になって、
S(n+1,k)=kS(n,k)+S(n,k-1)のような式になって、
これが第二種スターリング数だとわかります。
あとはFFT (NTT) 関連 -memo(いつもお世話になっております)
で出来ます。

おまけ

(xd/dx)^kf(x)はどうなるのでしょうか
k=0の時f(x)
k=1の時xf'(x)
k=2の時xf'(x)+x^2f''(x)
k=2の時xf'(x)+3x^2f''(x)+x^3f'''(x)
より第二種スターリング数を用いて
\sum_{t=0}^kS(k,t)x^tf^{(t)}(x)と表せます。(数学的帰納法で証明できます。) #練習問題
sum_of_exponential_times_polynomial_limit
sum_of_exponential_times_polynomial

ヒント

式を求めずとも形がわかればラグランジュ補間が出来ます

参考

https://min-25.hatenablog.com/entry/2019/10/08/214743

The source code for this blog is available on GitHub.