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

  • 相关阅读:
    html 上传图片前预览
    php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法
    php 计算 pdf文件页数
    php 获取半年内每个月的订单数量, 总价, 月份
    php 获取两个数组之间不同的值
    小程序支付功能
    关于nginx的Job for nginx.service failed because the control process exited with error code.错误
    linux 安装 Apollo
    MongoDB待续。。。
    ABP vNext...待续
  • 原文地址:https://www.cnblogs.com/deaf/p/13794014.html
Copyright © 2011-2022 走看看