日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【学习笔记】自然数幂和

發布時間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【学习笔记】自然数幂和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

溫馨提示: 本文文檔大小約\(11KB\).

引入

自然數冪和是一個我們從小就耳熟能詳的經典問題。定義\(S(n,k)=\sum^{n}_{i=0} i^k\), 顯然\(S(n,k)\)為關于\(n\)的不超過\((k+1)\)次多項式,那么給定\(k\), 如何快速求出這個多項式的系數?或者給定\(n\)\(k\), 如何快速求出\(S(n,k)\)? 這就是本文的討論內容。

本文介紹三種不同的方法——拉格朗日插值法、第二類斯特林數法和伯努利數法,這三種方法在解決不同的問題上各有優劣。

符號約定

\(x^{\underline n}\)表示\(x\)\(n\)次下降冪,即\(x^{\underline n}=\prod^{n}_{i=1}(x-i+1)\).

本文中提到的所有\(i\), 與虛數均無關系。

本文中所有運用數學歸納法進行證明的定理,歸納奠基均省略,請讀者自行處理。

拉格朗日(Lagrange)插值法

概述

Lagrange插值法的應用范圍很廣,給定任意\((n+1)\)個互不相同的點值\((x_i,y_i)\) (\(i=0,1,...,n\)),其可以在\(O(n^2)\)時間內求出一個不超過\(n\)次的多項式\(f(x)\),滿足對于任意\(i\), \(f(x_i)=y_i\). (“互不相同”指對于任意\(0\le i<j\le n\)\(x_i\ne x_j\))

暴力做法

\(f(x_i)=\sum^{n}_{i=0} a_ix^i\). 根據\((n+1)\)個點值,我們可以列出\((n+1)\)個方程,第\(j\)個形如\(\sum^{n}_{i=0}x_j^ia_i=y_j\).

直接高斯消元求解,時間復雜度\(O(n^3)\).

插值多項式的唯一性

定理1 給定任意\((n+1)\)對互不相同的點值\((x_i,y_i)\),恰好存在一個不超過\(n\)次的多項式\(f(x)\),滿足對于任意\(i\), \(f(x_i)=y_i\).

證明 根據暴力做法,我們就是要證明方程左邊的\((n+1)\times (n+1)\)的系數矩陣可逆。

實際上系數矩陣就是著名的范德蒙德(Vandermonde)矩陣: \(\begin{bmatrix} 1&1&1&...&1\\ a_0&a_1&a_2&...&a_n\\ a_0^2&a_1^2&a_2^2&...&a_n^2\\ & & & ... & \\ a_0^n&a_1^n&a_2^n&...&a_n^n\end{bmatrix}\)

可以證明,該矩陣行列式為\(\prod_{0\le i<j\le n} (a_j-a_i)\).

考慮數學歸納法,自下而上每一行減去上一行的\(a_0\)倍,該矩陣變為\[\begin{bmatrix}1&1&1&...&1\\ 0&a_1-a_0&a_2-a_0&...&a_n-a_0\\ 0&a_1(a_1-a_0)&a_2(a_2-a_0)&...&a_n(a_n-a_0)\\&&&...&\\0&a_1^{n-1}(a_1-a_0)&a_2^{n-1}(a_2-a_0)&...&a_n^{n-1}(a_n-a_0)\end{bmatrix}\]

然后對第一列展開,每一行提取公因式之后可得\(|V|=|V'|\prod^{n}_{i=1}(a_i-a_0)\), 其中\[V'=\begin{bmatrix}1&1&...&1\\a_1&a_2&...&a_n\\a_1^2&a_2^2&...&a_n^2\\&&...&\\a_1^{n-1}&a_2^{n-1}&...&a_n^{n-1}\end{bmatrix}\]

是一個\(n\times n\)的Vandermonde矩陣,由歸納知其行列式為\(\prod_{1\le i<j\le n}(a_j-a_i)\), 故\(|V|=\prod_{0\le i<j\le n}(a_j-a_i)\), 證畢。

由上可知,由于任意\(1\le i<j\le n\)滿足\(a_i\ne a_j\), 故該矩陣行列式不為\(0\).

任意多項式的插值

直接給出公式。

定理2 符合\((n+1)\)個點值\((x_i,y_i)\)的多項式為\(f(x)=\sum^{n}_{i=0} y_i\prod_{0\le j\le n,j\ne i}\frac{x-x_j}{x_i-x_j}\).

證明 代入\(x_k\), 當\(i\ne k\)時后面的乘法有一項因數是\(x-x_k=0\), 故該積恒為\(0\). 當\(i=k\)時顯然值為\(y_i\). 因此該多項式符合\((n+1)\)個給定點值。

至于這個公式具體是怎么推出來的,大概是考慮求Vandermonde矩陣的逆矩陣,使用矩陣分塊法解決,此處不再贅述。

有了這個公式,我們可以先預處理出\(\prod^n_{i=0}(x-x_i)\)的每一項系數(這是一個\((n+1)\)次多項式),然后對于每個\(i\)暴力用這個多項式除以\((x-x_i)\). 由于多項式除以一次式可在\(O(n)\)時間內完成,該算法時間復雜度為\(O(n^2)\).

使用FFT最好可以做到\(O(n\log ^2n)\), 但是我不會。

那么對于自然數冪和問題,我們可以求出\(S(m,n)\)\(0,1,2,...,n\)處的點值,然后利用Lagrange插值求出這個\((n+1)\)次多項式的每一項系數,時間復雜度\(O(n^2)\). 如果給定一個\(m\)要求\(S(m,n)\)的值,那么可以直接把\(n\)代入多項式求值,時間復雜度\(O(n^2)\), 與\(m\)無關。

對于自然數冪和問題的優化

如果給定\(m,n\)要求\(S(m,n)\), 不需要求出多項式每一項的系數,是否可以做到更優的復雜度?(假設\(n>k\))

\(f(n)=\sum^{m}_{i=0}y_i\prod_{0\le j\le n, j\ne i}\frac{n-j}{i-j}=\sum^{m}_{i=0}y_i\frac{\prod_{0\le j\le n}(m-j)}{\prod_{0\le j\le n,j\ne i}(i-j)\times (m-i)}\), 可以用階乘和逆元之類的方法優化,時間復雜度\(O(n\log n)\).

第二類斯特林(Stirling)數法

概述

第二類斯特林數是一類重要的計數序列,又稱“斯特林子集數”,其定義為\(\begin{Bmatrix}n\\k\end{Bmatrix}\)表示將\(n\)個有編號的物品放入\(k\)個無編號的集合中,每個集合都非空的方案數。

由定義可以得出其遞推式: \(\begin{Bmatrix}n\\k\end{Bmatrix}=k\begin{Bmatrix}n-1\\k\end{Bmatrix}+\begin{Bmatrix}n-1\\k-1\end{Bmatrix}\). 考慮最后一個物品,如果將其單獨放入一個集合中,則方案數為\(\begin{Bmatrix}n-1\\k-1\end{Bmatrix}\), 否則所有集合都已經有元素了,所以要加以區分,放入不同的集合算不同的方案,方案數為\(k\begin{Bmatrix} n-1\\k\end{Bmatrix}\).

下面兩個重要公式給出了第二類Stirling數與冪運算之間的關系。

定理3 \(m^n=\sum^{n}_{i=0} \begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\).

證明 我們可以從代數和組合等不同角度來證明。

證法一 代數做法: 考慮使用數學歸納法。對\(n\)施歸納,\[m^{n+1}=\sum^{n}_{i=0}m\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\\ =\sum^{n}_{i=0}(m-i)\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}+\sum^{n}_{i=0}i\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\\ =\sum^{n}_{i=0}\begin{Bmatrix}n\\i\end{Bmatrix}m^{i+1}+\sum^{n}_{i=0}i\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\\ =\sum^{n+1}_{i=1}\begin{Bmatrix}n\\i-1\end{Bmatrix}m^{\underline i}+\sum^{n}_{i=0}i\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline i}\\ =\sum^{n+1}_{i=0}\begin{Bmatrix}n+1\\i\end{Bmatrix}m^{\underline i}\]

證法二 組合做法: \(m^n\)相當于把\(n\)個有標號數放入\(m\)個有標號集合的方案數。這些集合有的是空集,有的是非空集合,考慮枚舉有多少個非空集合,先從有標號集合里有順序地選出這\(i\)個非空集合(方案數\(m^{\underline i}\)), 再計算\(n\)個數放進去的方案數。

定理4 \(\begin{Bmatrix}n\\m\end{Bmatrix}=\frac{1}{m!}\sum^{m}_{i=0}(-1)^i\begin{pmatrix}m\\i\end{pmatrix}(m-i)^n\)

證明 組合意義上相當于上式套容斥,代數意義上相當于上式套二項式反演。

根據定理4,我們發現固定\(n\)之后可以用FFT在\(O(n\log n)\)時間內對每個\(m\)求出第二類斯特林數。

分別構造多項式\(F(x)=\sum_{i\ge 0}\frac{(-1)^i}{i!}x^i\)\(G(x)=\sum_{i\ge 0}\frac{i^n}{i!}x^i\), 卷積相乘即可。

利用第二類斯特林數求自然數冪和

定理4指出一種快速求第二類斯特林數的方法,而定理3指出第二類斯特林數與自然數的冪的聯系。

既然定理3的式子是把通常冪轉化為下降冪,那么求自然數下降冪的和是否容易一些呢?

這是一個小學數學問題。\[\sum^{m}_{i=0}i^{\underline n}=\frac{1}{n+1}\sum^{m}_{i=0}(i+1)^{\underline {n+1}}-i^\underline {n+1}=\frac{(m+1)^{\underline {n+1}}-0^{\underline {n+1}}}{n+1}=\frac{1}{n+1}(m+1)^{\underline {n+1}}\]

那么考慮將自然數冪和轉化為自然數下降冪和: \[S(m,n)=\sum^{m}_{i=0}i^n=\sum^{m}_{i=0}\sum^{n}_{j=0}\begin{Bmatrix}n\\j\end{Bmatrix}i^{\underline j}=\sum^{n}_{j=0}\begin{Bmatrix}n\\j\end{Bmatrix}\sum^{m}_{i=0}i^{\underline j}=\sum^{n}_{j=0}\frac{1}{j+1}\begin{Bmatrix}n\\j\end{Bmatrix}(m+1)^{\underline {j+1}}\].

于是我們得到了一種通過第二類斯特林數求自然數冪和的方法。如果\(n\)不固定,那么可以\(O(n^2)\)預處理第二類斯特林數;如果\(n\)固定,那么可以\(O(n\log n)\)求第二類斯特林數一整行。求出第二類斯特林數之后,可以在不超過\(O(n\log P)\)的時間復雜度內求出\(S(m,n)\), 其中\(P\)為模數,\(O(\log P)\)為求乘法逆元的復雜度。

特別地,如果模數性質不好,沒法求逆元怎么辦?此時Lagrange插值法失去了用武之地,而該方法依然可用,但時間復雜度退化為\(O(n^2)\). 我們只需要求\((j+1)\)的逆元,而\((m+1)^{\underline {j+1}}\)是把\((j+1)\)個連續整數相乘,肯定有一個是\((j+1)\)的倍數,每次找到那個倍數即可。

伯努利(Bernoulli)數法

注意在這一部分中,我們需要改變\(S(m,n)\)的定義。現在\(S(m,n)\)定義為\(\sum^{m-1}_{i=0}i^n\), 即比原來少了\(m^n\).

概述

伯努利數法與上面兩種方法的適用對象有所不同。伯努利數法適用于對于某個固定的\(m\), 以及\(1\)\(N\)內的所有的\(n\), 求出\(S(m,n)\)的值, 時間復雜度可以做到\(O(n\log n)\).

伯努利數本身就是由伯努利觀察自然數冪和的過程中發現的。他對于較小的\(n\)求出了\(S(m,n)\)多項式的每一次項的系數,然后發現\((n+1)\)次系數總是\(1\), 對于\(0\le k\le n\), \((n-k)\)次項系數總是等于一個常數乘以\(n\)的一個下降冪。于是他定義了伯努利數。

伯努利數\(B_n\)由以下遞歸關系定義: \(\sum^{n}_{i=0}{n+1\choose i}B_i=[n=0]\). 伯努利數的前\(5\)項是: \(B_0=0, B_1=-\frac{1}{2},B_2=\frac{1}{6},B_3=0,B_4=-\frac{1}{30},B_5=0\).

定理5 伯努利數的指數生成函數(EGF)為\(B(x)=\sum_{n\ge 0}\frac{B_n}{n!}=\frac{x}{e^x-1}\).

證明 \[\sum^{n}_{i=0}{n+1\choose i}B_i=[n=0]\\\sum^{n+1}_{i=0}{n+1\choose i}B_i=B_{n+1}+{n=0}\\\sum^{n}_{i=0}{n\choose i}B_i=B_n+[n=1]\\\frac{B_n}{n!}+[n=1]=\sum^{n}_{i=0}\frac{1}{(n-i)!}\frac{B_i}{i!}\\B(x)+x=B(x)e^x\\B(x)=\frac{x}{e^x-1}\]

由此,用FFT多項式求逆就可以在\(O(n\log n)\)時間內預處理伯努利數前\(n\)項。

利用伯努利數求自然數冪和

定理6 伯努利數滿足關系式\(S(m,n)=\frac{1}{n+1}\sum^{n}_{i=0}{n+1\choose i}B_im^{n+1-i}\).

證明 考慮固定\(m\), 寫出\(S(m,n)\)的指數生成函數\(S_m(x)\).

\[S_m(x)=\sum_{n\ge 0}S(m,n)\frac{x^n}{n!}\\ =\sum_{n\ge 0}\sum^{m-1}_{i=0}i^n\frac{x^n}{n!}\\=\sum^{m-1}_{i=0}\sum_{n\ge 0}\frac{i^n}{n!}x^n\\=\sum^{m-1}_{i=0}e^{ix}\\=\frac{e^{mx}-1}{e^x-1}\\=B(x)\frac{e^{mx}-1}{x}\\=B(x)\sum_{n\ge 0}\frac{m^{n+1}}{(n+1)!}x^n\\ [x^n]S_m(x)=\sum^{n}_{i=0}\frac{B_i}{i!}\frac{m^{n+1-i}}{(n+1-i)!}\]

然后由于是指數生成函數所以\(S(m,n)=n![x^n]S_m(x)\), 證畢。

那么,我們用與上面幾例類似的方法,可以用FFT在\(O(N\log N)\)時間內對固定的\(m\)和每個\(n=1,2,...,N\)求出\(S(m,n)\).

三種方法的比較

三種方法適用的問題形式不同,各自的效率也有優劣。

當數據范圍可以接受\(O(n^2)\)的時間復雜度時,三種做法都可以不用FFT實現,代碼難度都較小。

求出多項式的每一次項系數,這是Lagrange插值法的專長。

當固定\(n\)不固定\(m\)時,Lagrange插值法和第二類Stirling數法較為適用。

當固定\(m\)不固定\(n\)時,Bernoulli數法較為適用。

當模數性質不好無法求逆元時,Stirling數法是較好的選擇。

解決有關具體問題時,一定要注意具體的限制(比如詢問形式、詢問次數、\(n,m\)的大小、是否固定),選擇較好的方法。

總結

以上是生活随笔為你收集整理的【学习笔记】自然数幂和的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。