请输入您要查询的百科知识:

 

词条 贝尔数
释义

定义

当n为大于等于0的整数时,n个元素的集合{1,2,...,n}可以划分若干个非空子集的个数称为贝尔数。贝尔数以埃里克·坦普尔·贝尔(Eric Temple Bell)的名字命名,贝尔数列开头为:1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, 678570, 4213597, 27644437, 190899322, 1382958545, 10480142147, 82864869804, 682076806159, 5832742205057, 51724158235372, 474869816156751……

举例

当n=4时,集合{1,2,3,4}可以划分为15个不同的非空子集如下:

{{1},{2},{3},{4}},

{{1,2},{3},{4}},

{{1,3},{2},{4}},

{{1,4},{2},{3}},

{{2,3},{1},{4}},

{{2,4},{1},{3}},

{{3,4},{1},{2}},

{{1,2},{3,4}},

{{1,3},{2,4}},

{{1,4},{2,3}},

{{1,2,3},{4}},

{{1,2,4},{3}},

{{1,3,4},{2}},

{{2,3,4},{1}},

{{1,2,3,4}}

程序

计算贝尔数的程序如下:(VC++环境下调试通过)

1. #include<iostream>

2. using namespace std;

3. unsigned __int64 c(int n,int m)

4. {

5. if(m>n/2) m=n-m;

6. int i;

7. unsigned __int64 a=1,b=1;

8. for(i=n;i>n-m;i--)

9. a*=i;

10. for(i=2;i<=m;i++)

11. b*=i;

12. return a/b;

13. }

14. unsigned __int64 bell(int n)

15. {

16. unsigned __int64 t=0;

17. int i;

18. if(n==0) return 1;

19. else

20. {

21. for(i=0;i<=n-1;i++)

22. t+=c(n-1,i)*bell(i);

23. }

24. return t;

25. }

26. int main()

27. {

28. int n;

29. while(scanf("%d",&n)!=EOF)

30. printf("%I64u\",bell(n));

31. return 0;

32. }

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/3/25 20:32:36