伯努利數,求解自然數冪和的關鍵係數

Deep_Kevin發表於2020-10-08

正題

      我們來考慮\sum_{i=0}^n i^k這個東西如何用與k相關的時間快速計算.

      我們記S(n,k)=\sum_{i=0}^n i^k

      我們構造其關於k的EGF,則有:

      \\G_n(x)=\sum_{k=0}\sum_{i=0}^n i^k\frac{x^k}{k!} \\=\sum_{i=0}^n\sum_k i^k\frac{x^k}{k!} \\=\sum_{i=0}^n e^{xi}

      可以發現這是一個等比數列求和的形式,那麼就有:

      (e^x-1)G_n(x)=e^{(n+1)x}-1 \to G_n(x)=\frac{e^{(n+1)x}-1}{e^x-1}

      接著,我們將其表示為拆成兩部分G_n(x)=\frac{x}{e^x-1}*\frac{e^{(n+1)x}-1}{x}

      可以觀察到,後面的那一部分,相當於EGF\left \{ \frac{n+1}{1} ,\frac{(n+1)^2}{2},\frac{(n+1)^3}{3},... \right \}

      因為EGF自帶一個i!的係數,這個EGF十分有規律,可以O(k)

      而前邊一部分貌似就沒那麼有規律了,我們將它們設為EGF\left \{ B_0,B_1,... \right \}

      而這個序列B就被稱為伯努利數.

      同時,因為是EGF卷積的形式,我們可以將它們通過式子寫出來:

      \\\frac{S(n,k)}{k!}=\sum_{i=0}^k\frac{B_i}{i!}\frac{(n+1)^{k-i+1}}{(k-i+1)!} \\S(n,k)=\frac{1}{k+1}\sum_{i=0}^kC_{k+1}^i B_i (n+1)^{k-i+1}

      伯努利數顯然可以通過多項式求逆的方式得到,然後就可以用O(k)的時間求出S(n,k)或者用O(k log k)的時間求出S(0,k),...,S(n,k)

      同時我們也得到了0~n-1的自然數k次冪和與n^{0,..,k+1}的關係

相關文章