伯努利數學習筆記的說...

經過一天的學習,我們發現伯努利數是個非常有用 (個屁) 的數列

定義

但是...伯努利數是什么呢?我們先給伯努利數一個定義:

\(B(i)\) 表示 伯努利數第 i 項,那么有:

\[\sum_{i=0}^{n} \begin{pmatrix} n+1\\i \end{pmatrix} B_i=0 ,~~ n>0\]

當然 \(B_0=1\) ,于是上面的式子就可以一直推下去了...

暴力計算

我們按照上面的式子可以算出:

\[B_0=1,B_1=-{1\over2},B_2={1\over 6},B_3={0},B4={1\over 30}······\]

但是這樣的效率嘛 【滑稽

當然是 \(n^2\) 的啦~ 于是我們試圖尋找更高效的辦法...

高效計算

我們發現,根據定義有這么個等式:

\[\sum_{i=0}^{n}\begin{pmatrix} n\\i \end{pmatrix} B_i = B_n ,n>1\]

這里原本 n 是 n+1 的,為了方便我們把 n 帶進去...

然后這個式子有什么用呢?當然有用咯~ 這玩意兒可是能化成卷積的形式丫!

于是拆個組合數玩玩,看這里:

\[\sum_{i=0}^{n}{ B_i\over i!(n-i)!} = {B_n\over n!} ,n>1\]

我們發現 \(n=0\) 時,其實也滿足上面的式子,只要我們定義 \(0!=1\)

\[\sum_{i=0}^{n}{ B_i\over i!} {1\over (n-i)!} = {B_n\over n!} ,n\neq1\]

\[\sum_{n=0,n\neq1}^{\infty}\sum_{i=0}^{n}{ B_i\over i!}~ · {1\over (n-i)!} = \sum_{n=0,n\neq1}^\infty {B_n\over n!} \]

注意上面的 n 仍然不等于 1 ...

然后我們是不是發現這玩意兒左邊其實是...卷積呢!\(1\over i!\) 不就是每項系數為 1 的多項式指數函數?

我們把伯努利數除去階乘當做是一個多項式的系數,那么原來的式子就可以搞生成函數了!

但我們首先還要把 n=1 的情況加進去:

\[\sum_{n=0,n\neq1}^{\infty}\sum_{i=0}^{n}{ B_i\over i!}~ · {1\over (n-i)!} = \sum_{n=0,n\neq1}^\infty {B_n\over n!} \]

\[\sum_{n=0}^{\infty}\sum_{i=0}^{n}{ B_i\over i!}~ · {1\over (n-i)!} = \sum_{n=0}^\infty {B_n\over n!} +[n=1] \]

你問我為什么這么寫?暴力算一下 n=1 的情況不就發現兩邊差了多少嘛!

然后轉個多項式我們就可以開始生成函數了 QVQ

\[\sum_{n=0}^{\infty}\Big(\sum_{i=0}^{n}{ B_i\over i!}~ · {1\over (n-i)!}\Big) x^n = \sum_{n=0}^\infty \Big( {B_n\over n!} +[n=1] \Big) x^n\]

\[\sum_{n=0}^{\infty} \sum_{i=0}^{n}{ B_i\over i!}x^i~ · {1\over (n-i)!} x^{n-i} = \sum_{n=0}^\infty \Big( {B_n\over n!} +[n=1] \Big) x^n\]

\[B(x)e^x=B(x) +x\]

這里之所以加了 x 是因為上面的 \(x^1\) 系數多了個 1

然后我們繼續推式子:

\[B(x)={x\over e^x-1}\]

\[B(x)=({e^x-1\over x})'\]

也就是說,我們只要階乘算出來整體左移一位然后求個逆就好了

但是這里要注意的是,我們這樣求出的是指數型生成函數的伯努利數的多項式,真正的伯努利數列要在我們求出來這個多項式系數的基礎上乘上對應的階乘(也就是在指數型生成函數的多項式中除去的那個階乘)

code

代碼如下...丑的一比...而且還省去了求逆的具體函數...

inline void prep(int len){B[0]=ifac[0]=ifac[1]=fac[0]=fac[1]=1;fp(i,2,len) ifac[i]=mul(mod-mod/i,ifac[mod%i]);fp(i,2,len) ifac[i]=mul(ifac[i-1],ifac[i]);fp(i,2,len) fac[i]=mul(fac[i-1],i);get_inv(ifac+1,B,len);fp(i,2,len) B[i]=mul(B[i],fac[i]);
}

補充

伯努利數其實分兩類: \(B^+\)\(B^-\) ,我們上面討論的是 \(B^-\) ,這兩者...唯一的區別就是 \(B_1\) 一個是正的一個是負的,具體而言,對于伯努利數列的每一項有: $B_i^+ = (-1)^i B_i^- $ ,但由于伯努利數列的奇數項 \(B_{2n+1}\)\(n>1\) 的情況下都是等于 0 的,所以兩個數列唯一不同的就是 \(B_1\) 這一項了

那么我們重新寫一遍伯努利數列就是:

\[B_0=1,B_1^{±}=±{1\over 2} ,B_2={1\over 6},B_3=0,B4={1\over 30}······\]

那么另一種不大常見的 \(B^+\) 有什么用么?或者說什么特殊的性質?

當然是有的咯,對于下面要說的 \(S(n,k)\) 這個冪和函數,如果 \(S(n,k)\) 是這么定義的:

\[S(n,k)=\sum_{i=0}^n i^k\]

那么令 \(B_i\) 表示伯努利數列 \(B^+\) 的第 i 項,則有:

\[S(n,k)={1\over k+1} \sum_{i=0}^k \begin{pmatrix} k+1 \\ i \end{pmatrix} B_i n^{k+1-i} \]

好像并沒有什么軟用...但是有時候要用到的話可能會讓你的推出來的式子更加簡潔?【霧

模板

然后這里是板子題:

板子題:51nod1228 序列求和

\(n^2\) 暴力足以優雅水過~

板子題2:51nod1258 序列求和 V4

要用任意MTT喲~

題解點這里

應用

伯努利數有個非常良好 (個屁) 的性質:

令:

\[S(n,k)=\sum_{i=1}^{n-1} i^k\]

則:

\[S(n,k)={1\over k+1} \sum_{i=0}^k \begin{pmatrix} k+1 \\ i \end{pmatrix} B_i n^{k+1-i} \]

即:

\[\sum_{i=1}^{n-1} i^k={1\over k+1} \sum_{i=0}^k \begin{pmatrix} k+1 \\ i \end{pmatrix} B_i n^{k+1-i}\]

PS:關于上面等式的證明可以看這里

然后一系列推倒:

\[{1\over k+1} \sum_{i=1}^{k+1} \begin{pmatrix} k+1 \\ k+1-i \end{pmatrix} B_{k+1-i} n^i\]

\[k! \sum_{i=1}^{k+1} {B_{k+1-i}\over (k+1-i)!} {n^i\over i!}\]

這可不就是卷積的形式嘛!

現在我們就可以在一些 (dl)數學題里面大展拳腳了呢~

比如這道:

倉鼠的數學題

題解點這里

轉載于:https://www.cnblogs.com/Judge/p/10722777.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/386998.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/386998.shtml
英文地址,請注明出處:http://en.pswp.cn/news/386998.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Dijkstra迪杰斯特拉算法 C++實現

本篇文章主要介紹了Dijkstra迪杰斯特拉算法的C實現,文章包含兩個部分,在第一部分中我會簡單介紹迪杰斯特拉算法以及一些個人的理解,第二部分會對C代碼的邏輯進行解釋。下面是我已經上傳的代碼資源,大家有興趣的可以點擊鏈接下載資…

Python開發一個股票類庫

前言 使用Python開發一個股票項目。 項目地址: https://github.com/pythonstock/stock 相關資料: http://blog.csdn.net/freewebsys/article/details/78294566 主要使用開發語言是python。 使用的lib庫是pandas,tushare,Tens…

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍歷建立二叉樹 C++...

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal 由前序和中序遍歷建立二叉樹 C Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. For example, given…

C++ STL 學習筆記 3. 文本文件操作

本文主要總結了C中對文本文件的基本操作以及使用心得,第一部分中總結了C對文本文件的基本操作,第二部分中會以csv文件為例,進行讀取存儲由逗號分隔的字符串的操作。 1. 文本讀取寫入基礎 要使用文件輸入輸出流,首先需要include相…

C# 調用python

1.C# 調用python 本質上是使用命令行運行python 1.1 C# 使用命令行 program.cs using System; using System.Diagnostics; using System.IO;namespace test {class Program{static void Main(string[] args){Program p new Program();string result p.run_cmd("ping…

4-17

1、html 中div class是什么? 在這里我將用id與class的比較,讓這個問題更容易理解(1)、使用區別id具有唯一性,在一個網頁中同一個命名只能使用一次;class命名的類可以在一個網頁中使用無數次。(2…

python pandas serie簡介及基本使用

本篇文章主要羅列了pandas模塊中serie的基本使用。環境是jupyter notebook python 3.7。 serie是能夠保存任何類型數據的一維數組,軸標簽統稱為索引,索引必須是唯一的散列且與數據的長度相同,默認情況下為np.arange(n)。 首先是import pand…

Linux系統中nc工具那些不為人知的用法

Linux nc命令用法 參考地址&#xff1a;https://www.cnblogs.com/jjzd/p/6306273.html -g<網關>&#xff1a;設置路由器躍程通信網關&#xff0c;最多設置8個; -G<指向器數目>&#xff1a;設置來源路由指向器&#xff0c;其數值為4的倍數; -h&#xff1a;在線幫助;…

python pandas dataframe基本使用整理

dataframe是一種表格型的數據存儲結構&#xff0c;可以看作是幾個serie的集合。dataframe既有行索引&#xff0c;也有列索引。 以下代碼環境為google colab/jupyter notebook。 接下來就對dataframe的基本使用進行整理。 dataframe也從屬于pandas模塊&#xff0c;因此還是老規矩…

常見開源分布式存儲系統

對比說明 /文件系統 TFS FastDFS MogileFS MooseFS GlusterFS Ceph 開發語言 C C Perl C C C 開源協議 GPL V2 GPL V3 GPL GPL V3 GPL V3 LGPL 數據存儲方式 塊 文件/Trunk 文件 塊 文件/塊 對象/文件/塊 集群節點通信協議 私有協議&#xff08;T…

[十二省聯考2019]皮配

題目鏈接 選一個派系和一個陣營可以唯一確定一名導師 因為每一個陣營里的導師都分別來自不同派系&#xff0c;所以k0時&#xff0c;對陣營的選擇是不影響對派系的選擇的 唯一的限制就是同城市的要在同一個陣營 所以以每個城市為物品&#xff0c;物品大小為該城市的人數&#xf…

機器學習理論梳理1: PCA主成分分析

機器學習的理論部分學習知識點比較亂且雜。我這里通過幾篇文章&#xff0c;簡單總結一下自己對機器學習理論的理解&#xff0c;以防遺忘。第一篇文章主要概述了機器學習的基本任務以及一個常用的降維方法&#xff0c;主成分分析。 機器學習的基本任務 機器學習能實現許多不同…

29 _react-router說明

一、SPA的理解 1.單頁面web應用(single page web application ,SPA) 2.整個應用只有一個完整的頁面 3.點擊頁面中的鏈接不會刷新頁面&#xff0c;本身也不會向服務器發請求 4.當點擊路由鏈接時&#xff0c;只會做頁面的局部更新 5.數據都需要通過ajax請求獲取&#xff0c;并在前…

Java程序員如何快速理解Kubernetes

我們希望微服務是可復制的&#xff0c;可替換的工作節點&#xff0c;這樣可以輕松進行升級或降級&#xff0c;同時無需任何停機時間&#xff0c;并花費最少代價的管理。我們可以說我們希望他們成為我們的小黃人&#xff08;minions&#xff09;。本文我們將通過一個簡單的例子來…

NLP基礎 : HMM 隱馬爾可夫模型

Hidden Markov Model, HMM 隱馬爾可夫模型&#xff0c;是一種描述隱性變量(狀態)和顯性變量(觀測狀態)之間關系的模型。該模型遵循兩個假設&#xff0c;隱性狀態i只取決于前一個隱性狀態i-1&#xff0c;而與其他先前的隱形狀態無關。觀測狀態也只取決于當前的隱形狀態。因此我們…

關于秒殺系統優化方向

今天聽了一節咕泡學院的公開課&#xff0c;有收獲。 秒殺系統的特點&#xff1a; 1.限時&#xff1b;2.限量供應&#xff1b;3.并發量大&#xff1b;如何優化&#xff1a; 1.客戶端數據緩存。 2.CDN加速。 3.nginx動靜分離&#xff0c;靜態資源緩存&#xff0c;負載均衡。 4.se…

Mysql插入很慢,找到了稍微快點的方法

MYSQL批量插入數據庫實現語句性能分析 假定我們的表結構如下 代碼如下 CREATE TABLE example ( example_id INT NOT NULL, name VARCHAR( 50 ) NOT NULL, value VARCHAR( 50 ) NOT NULL, other_value VARCHAR( 50 ) NOT NULL ) 通常情況下單條插入的sql語句我們會這么寫&…

Linux - 時間相關命令 - ntpdate, date, hwclock

1. 概述 最近也不知道寫啥了, 把之前的老文檔整理一下, 湊個數什么的配置時間這種工作, 偶爾還是要用一下主要描述 3 個命令的簡單適用 ntpdatehwlock2. ntpdate 1. 概述 用于同步時鐘的命令2. 機制 通常是有一個服務器對外提供時間客戶端可以與時間服務器同步ntp 是他們之間交…

RUNOOB python練習題1

用來練手的python 練習題&#xff0c;原鏈接 : python練習實例1 題干 : 有四個數字&#xff1a;1、2、3、4&#xff0c;能組成多少個互不相同且無重復數字的三位數&#xff1f;各是多少&#xff1f; import numpy as np cen np.array([1,2,3,4]) tens np.array([1,2,3,4])…

mysql explain用法和結果的含義

explain顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。 使用方法&#xff0c;在select語句前加上explain就可以了&#xff1a; 如&#xff1a; explain select surname,first_name form a,b where a.idb.id EXPLAIN列…