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

    伯努利数(B_i)的生成函数定义如下

    [B(z) = frac{ze^z}{e^z - 1} = sum_{i = 0} ^ {infty} B_i imes frac{z^i}{i!} ]

    一次多项式求逆即可快速计算(B_i)

    那么它有啥用呢

    可以用来计算自然数幂和

    我们记

    [S_p(n) = sum_{i = 1} ^ {n} i^p ]

    那么

    [ egin{aligned} A(z,n) &= sum_{p=0}^{infty} S_p(n) imes frac{z^p}{p!}\ &= sum_{p=0}^{infty} sum_{i=1}^{n} frac{(iz)^p}{p!}\ &= sum_{i=1}^{n} e^{iz} = frac{1-e^{nz}}{e^{-z}-1}\ &= frac{ze^z}{e^z - 1} imes frac{e^{nz} - 1}{z}\ &= B(z) imes frac{e^{nz} - 1}{z}\ &= sum_{j=0}^{infty} B_j imes frac{z^{j-1}}{j!} imes (sum_{k=1}^{infty}frac{(nz)^k}{k!})\ &= sum_{p=0}^{infty} (sum_{j=0}^{p} B_j imes frac{z^{j-1}}{j!} imes frac{(nz)^{p+1-j}}{(p+1-j)!})\ &= sum_{p=0}^{infty} z^p imes (sum_{j=0}^{p} frac{B_j imes n^{p+1-j}}{j! imes {(p+1-j)!}})\ &= sum_{p=0}^{infty} z^p imes frac{1}{p+1} imes frac{1}{p!} imes (sum_{j=0}^{p} B_j imes inom{p+1}{j} imes n^{p+1-j})\ end{aligned} ]

    对比系数不难发现

    [S_p(n) = frac{1}{p+1} imes sum_{j=0}^{p} inom{p+1}{j} imes B_j imes n^{p+1-j} ]

    一道简单的应用

    2018 Multi-University Training Contest 4 Delighful Formulas

    根据题意列出式子:

    [Ans = sum_{i = 1} ^ {N} {[gcd(i, N) = 1] sum_{j = 1} ^ {i} {j ^ K}} ]

    莫比乌斯反演:

    [ egin{aligned} Ans & = sum_{d mid N} {mu(d) sum_{i = 1} ^ {N} {[d mid i] sum_{j = 1} ^ {i} {j ^ K}}} \ & = sum_{d mid N} {mu(d) sum_{i = 1} ^ {frac{N} {d}} sum_{j = 1} ^ {id} {j ^ K}}\ end{aligned} ]

    定义 (F)

    [F_p(N) = sum_{i = 1} ^ {N} {i ^ p} ]

    显然 (F_p)(p + 1) 阶多项式:

    [F_p(N) = sum_{i = 0} ^ {p + 1} {a_{p, i} N ^ i} ]

    利用 (F) 化简原式:

    [ egin{aligned} Ans & = sum_{d mid N} {mu(d) sum_{i = 1} ^ {frac{N} {d}} {F_K(id)}} \ & = sum_{d mid N} {mu(d) sum_{i = 1} ^ {frac{N} {d}} sum_{j = 0} ^ {K + 1} {a_{K, j} (id) ^ j}} \ & = sum_{d mid N} {mu(d) sum_{j = 0} ^ {K + 1} {a_{K, j} d ^ j sum_{i = 1} ^ {frac{N} {d}} {i ^ j}}} \ & = sum_{d mid N} {mu(d) sum_{j = 0} ^ {K + 1} {a_{K, j} d ^ j F_j(frac{N}{d})}} \ & = sum_{d mid N} {mu(d) sum_{j = 0} ^ {K + 1} {a_{K, j} d ^ j sum_{k = 0} ^ {j + 1} {a_{j, k} (frac{N} {d}) ^ k}}} \ & = sum_{d mid N} {mu(d) sum_{i = -1} ^ {K + 1} {d ^ i sum_{j = 0} ^ {K + 1} sum_{k = 0} ^ {j + 1} {[j - k = i] a_{K, j} a_{j, k} N ^ k}}} \ end{aligned} ]

    定义 (G)

    [G_i = sum_{j = 0} ^ {K + 1} sum_{k = 0} ^ {j + 1} {[j - k = i] a_{K, j} a_{j, k} N ^ k} ]

    看题解发现这个是可以算的,只需要用伯努利数展开一下

    [ egin{aligned} G_i &= sum_{j = 0} ^ {K + 1} sum_{k = 0} ^ {j + 1} {[j - k = i] a_{K, j} a_{j, k} N ^ k}\ &= sum_{j = 0} ^ {K + 1} sum_{k = 0} ^ {j + 1} [j - k = i] B_{K + 1 - j} imes frac{K!}{j! imes (K + 1 - j)!} imes B_{j + 1 - k} imes frac{j!}{k! imes (j + 1 - k)!} imes N ^ k\ &= K! imes frac{B_{i+1}}{(i+1)!} imes sum_{j = 0} ^ {K + 1} sum_{k = 0} ^ {j + 1} [j - k = i] frac{B_{K + 1 - j}}{(K + 1 - j)!} imes frac{N^k}{k!}\ end{aligned} ]

    容易发现这是一个卷积形式,NTT一次即可

    那么答案就是

    [ egin{aligned} Ans & = sum_{d mid N} {mu(d) sum_{i = -1} ^ {K + 1} {d ^ i G_i}} \ & = sum_{i = -1} ^ {K + 1} {G_i sum_{d mid N} {mu(d) d ^ i}} \ & = sum_{i = -1} ^ {K + 1} {G_i prod_{p mid N} {(1 - p ^ i)}} \ end{aligned} ]

    (O(KM))计算即可

    总复杂度是(O(K(logK + M)))

    code

  • 相关阅读:
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    使用Jasmine和karma对传统js进行单元测试
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南
    nginx 基于IP的多虚拟主机配置
    Shiro 框架的MD5加密算法实现原理
    项目实战:Qt+OSG三维点云引擎(支持原点,缩放,单独轴或者组合多轴拽拖旋转,支持导入点云文件)
    实用技巧:阿里云服务器建立公网物联网服务器(解决阿里云服务器端口,公网连接不上的问题)
  • 原文地址:https://www.cnblogs.com/deaf/p/13794014.html
Copyright © 2011-2022 走看看