基本介紹
- 中文名:貝爾數
- 外文名:Bell number
- 提出者:埃里克·坦普爾·貝爾
- 套用學科:組合數學
- 適用領域範圍:數學
- 適用領域範圍:數列
定義,公式,貝爾三角形,程式,
定義
- {{a}, {b}, {c}}
- {{a}, {b, c}}
- {{b}, {a, c}}
- {{c}, {a, b}}
- {{a, b, c}}
公式
貝爾數適合遞推公式:
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/8/3c0/6a520d1c881d108711624de3998b.jpg)
它們也適合“Dobinski公式”:
它們也適合“Touchard同餘”:若p是任意質數,那么
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/8/544/67c803d8f63662b5f7acd05089a9.jpg)
每個貝爾數都是"第二類Stirling數"的和
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/9/1f5/df01092ce33147af2ca06880c4e4.jpg)
Stirling數S(n, k)是把基數為n的集劃分為正好k個非空集的方法的數目。
貝爾數的指數母函式是
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/d/14b/3b5f19f7671e78b85056691cb9db.jpg)
貝爾三角形
用以下方法建構一個三角矩陣(形式類似楊輝三角形):
(1) 第一行第一項是1(a_{1,1} = 1)
(2) 對於n>1,第n行第一項等同第n-1行最後一項。(
)
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/c/67e/80b12160018191de509c3d1ca6c1.jpg)
(3) 對於m,n>1,第n行第m項等於它左邊和左上方的兩個數之和。(
)
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/7/7e3/5a78945eba2983864073a2b9fee7.jpg)
結果如下:(OEIS的A011971數列)
![](http://178.128.105.246/cars-https-www.newton.com.tw/img/4/22d/07f240ced466610b1594a86c4bb6.jpg)
每行首項是貝爾數。
這個三角形稱為貝爾三角形、Aitken陣列或Peirce三角形(Bell triangle, Aitken's array, Peirce triangle)。
程式
計算貝爾數的程式如下:(VC++環境下調試通過)
#include<iostream>
#include <stdio.h>
using namespace std;
unsigned __int64 c(int n,int m){
if(m>n/2)
m=n-m;
int i;
unsigned __int64 a=1,b=1;
for(i=n;i>n-m;i--)
a*=i;
for(i=2;i<=m;i++)
b*=i;
return a/b;
}
unsigned __int64 bell(int n){
unsigned __int64 t=0;
int i;
if(n==0)
return 1;
else{
for(i=0;i<=n-1;i++)
t+=c(n-1,i)*bell(i);
}
return t;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF)
printf("%I64u\n",bell(n));
return 0;
}