zoukankan      html  css  js  c++  java
  • 浅谈贝尔数及其性质

    前言

    一个早就听说过的东西,但一直不知道是啥。

    今天刚好做到一道贝尔数裸题,就来学习了一下。

    定义

    贝尔数(B_n)表示的是(n)个有标号元素的集合划分数目

    其中集合划分是指把一个集合不重不漏地分成若干子集。

    递推式

    考虑新增一个元素(B_{n+1}),我们去枚举与它不在同一集合中的元素个数(i),由此得到公式:

    [B_{n+1}=sum_{i=0}^nC_n^iB_i ]

    贝尔数与第二类斯特林数

    此外,考虑到第二类斯特林数的定义:第二类斯特林数(S_2(n,m))表示(n)个有标号元素划分为(m)个非空集合的方案数。(关于第二类斯特林数可见斯特林数的基础性质与斯特林反演的初步入门,后文还会对它的一些性质有所涉及)

    显然根据它俩的定义就可以得出它们的关系:

    [B_n=sum_{i=0}^nS_2(n,i) ]

    (Touchard)同余

    一个非常重要的性质,使得在取模问题中能够快速求出某一贝尔数。

    首先给出结论,对于一个质数模数(p),满足:

    [B_{n+p}equiv B_n+B_{n+1}(mod p) ]

    接下来是证明。


    首先证明一个引理:若(n)为质数模数,则(forall min(1,n)),满足(S_2(n,m)equiv 0(mod n))(显然,(m=1)(n)时,(S_2(n,m)=1))。

    考虑我们快速求一行斯特林数的过程(可见【洛谷5395】第二类斯特林数·行),就是构造两个生成函数:

    [F(x)=sum_{k=0}^{+infty}frac{(-1)^k}{k!}x^k\ G(x)=sum_{k=0}^{+infty}frac{k^n}{k!}x^k ]

    但实际上它们可以进一步变形,特别是其中(G(x))(n)为质数模数时可以利用费马小定理把(k^n)的指数消成(1),得到:

    [F(x)=sum_{k=0}^{+infty}frac{(-1)^k}{k!}x^k=e^{-x}\ G(x)=sum_{k=0}^{+infty}frac{k^n}{k!}x^kequivsum_{k=0}^{+infty}frac{k}{k!}x^k=sum_{k=1}^{+infty}frac1{(k-1)!}x^k=sum_{k=0}^{+infty}frac1{k!}x^{k+1}=xe^x ]

    所以说:

    [S_2(n,m)=[x^m](F(x)*G(x))equiv[x^m]x=0 ]


    然后可以开始我们的正式证明了。

    考虑把(B_{n+p})拆开,先枚举把(p)个元素划分成了(j)个集合,然后枚举(n)个元素中不与(p)合并的元素个数(i),则剩下的(n-i)个元素每一个都可以随意放到这(j)个集合中的某一个里,由此得到公式:

    [B_{n+p}=sum_{i=0}^nC_n^iB_isum_{j=0}^pj^{n-i}S_2(p,j) ]

    由于(forall jin(1,p),S_2(p,j)equiv0(mod p)),所以只有当(j=1)(p)(S_2(p,j))才有值(1),由此得到:

    [B_{n+p}equivsum_{i=0}^nC_n^iB_i(1+p^{n-i})=sum_{i=0}^nC_n^iB_i+sum_{i=0}^nC_n^iB_ip^{n-i} ]

    其中前者根据我们之前得到的递推式,就是(B_{n+1})

    而后者中存在一项(p^{n-i}),当(i ot=n)(p^{n-i}equiv0(mod p)),所以只能取(i=n),此时(C_n^n=1),只剩(B_n)

    综上,我们得出结论:

    [B_{n+p}equiv B_n+B_{n+1}(mod p) ]


    顺便提一下它的一个扩展:

    [B_{n+p^m}equiv mB_n+B_{n+1}(mod p) ]

    例题

    【BZOJ3501】[PA2008] Cliquers Strike Back

    败得义无反顾,弱得一无是处
  • 相关阅读:
    INI配置文件的格式
    UserControl图片显示报错问题
    CornerRadius圆角属性
    Stretch属性
    [WPF]The type name ‘App’ does not exist in the type '...'的问题
    [Word]解决Word中执行输入操作时后面字符自动被删除的问题
    MATLAB中的取整函数(fix、round、floor、ceil)
    [数据库][C#]几个常用的正则表达式
    [数据库][C#]提取字符串中的数字
    springmvc注解知识点汇总
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/Bell.html
Copyright © 2011-2022 走看看