1. 程式人生 > 實用技巧 >FZU 第十六屆程式設計競賽_重現賽 & FOJ Problem 2314 寶寶會求導 題解

FZU 第十六屆程式設計競賽_重現賽 & FOJ Problem 2314 寶寶會求導 題解

FZU 第十六屆程式設計競賽_重現賽 & FOJ Problem 2314 寶寶會求導

已知 \(\displaystyle f(x)={1\over e^{-x}+1}\)

\(x=0\) 處泰勒展開第 \(k\) 項係數 \(\mod (10^9+7)\)


已知該函式在 \(x=0\) 處泰勒展開式第 \(k\) 項係數為 \(\displaystyle {f^{(k)}(0)\over k!}\)

由於 \(({1\over k!})\mod (10^9+7)\) 可以 \(O(n)\) 求出,故直接考慮求解 \(f^{(k)}(0)\mod (10^9+7)\)

不妨設 \(\displaystyle y=f(x)={1\over e^{-x}+1}\Rightarrow {\text dy\over \text dx}=-{{\text d\over \text dx}(e^{-x}+1)\over (e^{-x}+1)^2}={(e^{-x}+1)-1\over (e^{-x}+1)^2}=y-y^2\)

再次求導可得 \(\displaystyle {\text d^2 y\over \text dx^2}={\text d\over \text dx}({\text dy\over \text dx})={\text dy\over \text dx}\cdot {\text d\over \text dy}({\text dy\over \text dx})={\text dy\over \text dx}\cdot {\text d\over \text dy}(y-y^2)=(1-2y)\cdot {\text dy\over \text dx}=(1-2y)(y-y^2)=y-3y^2+2y^3\)

進而可觀察出規律,若設 \(\displaystyle {\text d^n y\over \text dx^n}=\sum_{i=0}^{n+1}a_iy^i\)

\(\displaystyle {\text d^{n+1} y\over \text dx^{n+1}}={\text d\over \text dx}({\text d^n y\over \text dx^n})={\text dy\over \text dx}\cdot ({\text d\over \text dy}\sum_{i=0}^{n+1}a_iy^i)\)

由於後面這個顯然是個多項式函式,前面的我們之前求導得到為 \((y-y^2)\)

\(\therefore \displaystyle {\text d^{n+1} y\over \text dx^{n+1}}=(y-y^2)(\sum_{i=0}^{n+1}ia_iy^{i-1})=(1-y)(\sum_{i=0}^{n+1}ia_iy^i)\)

也就是說,我們可以根據之 \(n\) 階導的 \(y\) 多項式係數,可以 \(O(n)\) 地推出 \((n+1)\) 階導的 \(y\) 多項式係數

\(\because \displaystyle y|_{x=0}={1\over 2}\)

故我們可以 \(O(n^2)\) 地求解出問題結果


Ans[MAXN] 儲存 \(k\) 階導的答案, INV2[MAXN] 儲存 \(({1\over 2})^k \mod (10^9+7)\) , Frac[MAXN] 儲存 \(({1\over k!})\mod (10^9+7)\)F[MAXN] 儲存當前階導數的 \(y\) 多項式係數

可以先 \(O(n)\) 預處理出 \(({1\over 2})^k \mod (10^9+7)\)\(k!\mod (10^9+7)\)

使用尤拉定理與快速冪 \(({1\over 1000!})\equiv (1000!)^{(10^9+7)-1}(\mod 10^9+7)\) 求解出 \(({1\over 1000!})\mod (10^9+7)\) 。再反向掃回,求解出 \(({1\over k!})\mod (10^9+7)\)

接下來通過遞推算出 F[MAXN] 從而求解 Ans[MAXN]