码迷,mamicode.com
首页 > 其他好文 > 详细

恶补---bell数

时间:2017-01-31 21:50:46      阅读:406      评论:0      收藏:0      [点我收藏+]

标签:lin   add   can   滚动   i++   main   img   递推公式   a20   

定义

bell数即一个集合划分的数目

 

示例

前几项的bell数列为

1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975 ,...

 

求值方法

1、bell数适合递推公式

 

技术分享

 

2、每个贝尔数都是"第二类Stirling数"的和

 
技术分享

 

3、用一下方法可以构造一个bell三角形(Aitken阵列或Peirce三角形)

1)第一行第一列是1

2)对于n>1,第n行第一列等于上一行的最后一个数

3)对于n>1,m>1,第n行第m列=第n行第m-1列+第n-1行第m-1列

三角阵的第一列是bell数

技术分享

 

下面给出我的构造程序(用滚动数组+模数)

 

#include <stdio.h>
#define MaxN 110
#define mo 1000000007
int _t;
unsigned long long f[2][MaxN],bellnum[MaxN];
void bell_number(int n)
{
    int c = 0;
    f[c][1] = 1LL;
    bellnum[++_t]=1LL;
    for(int i = 2;i <= n;i++)
        {
        c ^= 1;
        bellnum[++_t] = f[c][1] = f[c ^ 1][i - 1];
        for(int j = 2;j <= i;j++)
            f[c][j] = (f[c][j - 1] + f[c ^ 1][j - 1]) % mo;
        }
}
int main()
{
    int x;
    scanf("%d",&x);
    bell_number(x);
    for(int i = 1;i <= x;i++)
        printf("%lld\n",bellnum[i]);
    return 0;
}

 

性质

它们也适合“Touchard同余”:若p是任意质数,那么
 
技术分享
 
 

恶补---bell数

标签:lin   add   can   滚动   i++   main   img   递推公式   a20   

原文地址:http://www.cnblogs.com/keshuqi/p/6359102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!