zoukankan      html  css  js  c++  java
  • 伯努利数简单学习笔记

    伯努利数

    定义与公式

    我们常用BiB_i定义第ii个伯努利数。

    生成函数定义方式:
    zez1=n=0Bnznn! frac{z}{e^z-1}=sumlimits_{n=0}^infty B_nfrac{z^n}{n!}
    这里的zCzin CCC为复数域)
    由于伯努利数是指数型函数的母函数,所以我们对exe^x进行泰勒展开即可得到。


    99项伯努利数:
    B0=1   B1=12   B2=16   B3=0   B4=130B5=0   B6=142   B7=0   B8=130   B9=0 B_0=1 B_1=-frac{1}{2} B_2=frac{1}{6} B_3=0 B_4=-frac{1}{30} \ B_5=0 B_6=frac{1}{42} B_7=0 B_8=-frac{1}{30} B_9=0

    我们不难发现对于BnB_n,当BnB_n为奇数且不为11时,Bn=0B_n=0

    其中有些时候定义B1=12B_1=frac{1}{2},那么对应的生成函数只需改为zezez1frac{ze^z}{e^z-1}即可。


    递归定义方式:
    Bn=[m=0]k=0m1(mk)Bkmk+1 B_n=[m=0]-sumlimits_{k=0}^{m-1} binom{m}{k}frac{B_k}{m-k+1}
    边界为B0=1B_0=1[m=0][m=0]表示当m=0m=0时为11,否则为00

    简单应用

    • 自然数幂的前缀和

    i=1nik=1k+1i=1k+1Ck+1iBk+1i(n+1)i sum_{i=1}^ni^k=frac{1}{k+1}sum_{i=1}^{k+1}C_{k+1}^iB_{k+1-i}(n+1)^i

    • 特殊的公式
      k=0nCn+1kBk=0 sum_{k=0}^{n}C_{n+1}^kB_k=0

    Bn=1n+1(Cn+10B0+Cn+11++Cn+1n1Bn1) B_n=-frac{1}{n+1}(C_{n+1}^0B_0+C_{n+1}^{1}+cdots +C_{n+1}^{n-1}B_{n-1})

    我们将生成函数的公式继续变形得到:

    =zi=1zii!=1i=0zi(i+1)! =frac{z}{sum_{i=1}^{infty}frac{z^i}{i!}} \ =frac{1}{sum_{i=0}^{infty}frac{z^i}{(i+1)!}}
    最后就变成了多项式i=0zi(i+1)!sum_{i=0}^{infty}frac{z^i}{(i+1)!}的逆元了,用多项式求逆(NTT)即可在O(nlogn)O(nlogn)的时间内预处理前nn项。


    参考:

  • 相关阅读:
    Python——数据结构——字典
    Python——print()函数
    Python数据结构——序列总结
    elasticsearch全文检索java
    elasticsearch单例模式连接 java
    【转载】信号中断 与 慢系统调用
    设计模式——状态模式(C++实现)
    设计模式——观察者模式(C++实现)
    C++调用C方法
    设计模式——外观模式(C++实现)
  • 原文地址:https://www.cnblogs.com/VictoryCzt/p/10053419.html
Copyright © 2011-2022 走看看