zoukankan      html  css  js  c++  java
  • 伯努利数

    正整数幂与伯努利数

    十分神仙。

    考虑正整数幂:

    [sum_{i=1}^n i^k ]

    假设我们给定了 (n) 被要求求解 (k={1,2,3...10^5}) 时的答案,怎么办( (n) 非常大 )。

    考虑一个构造,我们构造 (mathbf{EGF}) 来计算答案,设 (S_k(n)=sum_{i=1}^n i^k),我们构造 (mathbf{EGF}) 为:

    [G_n(x)=sum_{i=0}^n S_i(n)frac{x^i}{i!} ]

    容易注意到:

    [egin{aligned} &G_n(x)=sum_{i=0}^n sum_{j=1}^n j^i frac{x^i}{i!} \&=sum_{j=1}^n sum_{i=0}^n j^ifrac{x^i}{i!} \&=sum_{j=1}^n e^{jx} end{aligned}]

    然后考虑

    [egin{aligned} &(1-e^{-x})G_n(x)=sum_{j=1}^n e^{jx}-sum_{j=0}^{n-1}e^{jx} \&implies (1-e^{-x})G_n(x)=e^{nx}-1 \&implies G_n(x)=frac{e^{nx}-1}{1-e^{-x}} end{aligned}]

    那么直接展开分子,然后求个分母的逆即可,复杂度 (mathcal O(klog k))


    对于某个具体的 (k) 考虑快速的求解此多项式:

    考虑构造,假设能够将 (G_n(x)) 表示为两个多项式的卷积,同时其中一个恰好为以 (n) 的次幂为系数的多项式,那么我们容易得到系数即卷积结果,换而言之得到其多项式表达式。

    事实上,我们注意到:

    [egin{aligned} &G_n(x)=frac{e^{nx}-1}{1-e^{-x}} \&implies G_n(x)=frac{e^{(n+1)x}-e^x}{e^x-1} \&implies G_n(x)=igg(frac{xe^x}{e^x-1}igg)cdot igg(frac{e^{nx}-1}{x}igg) end{aligned}]

    注意到后者本质是 (mathbf{EGF}{frac{n}{1},frac{n^2}{2},frac{n^3}{3}...frac{n^{i+1}}{i+1}}),请注意描述 (mathbf{EGF}) 系数序列时默认除以 (i!)

    然后考虑 (frac{xe^x}{e^x-1}) 的展开式,我们认为其展开式的对应级数为 (mathbf{EGF}{B_0,B_1...})

    所以我们得到:

    [egin{aligned} &S_k(n)=sum_{i+j=k} inom{k}{i}B_ifrac{n^{j+1}}{j+1} \&=sum_{i=0}^k B_ifrac{k!}{i!(k-i)!}frac{n^{k-i+1}}{k-i+1} \&=frac{1}{k+1}sum_{i=0}^k B_i frac{(k+1)!}{i!(k-i+1)!}n^{k-i+1} \&=frac{1}{k+1}sum_{i=0}^k B_iinom{k+1}{i}n^{k-i+1} end{aligned}]

    这样就得到了 (sum_{i=0}^n i^k) 这个关于 (n) 的多项式 (S_k(n)) 的通式了。


    如何求解伯努利数

    注意到伯努利数本质上是 (frac{xe^x}{e^x-1}) 的展开式,所以求逆即可。

    如何优雅的暴力

    注意到:

    [frac{xe^x}{e^x-1} imes frac{e^{x}-1}{x}=e^x ]

    所以 (mathbf{EGF}{B_0,B_1...} imes mathbf{EGF}{frac{1}{1},frac{1}{2},frac{1}{3}...}=mathbf{EGF}{1,1,1...})

    所以我们有:

    [egin{aligned} &sum_{i+j=k} B_i imes frac{1}{j+1} imes inom{k}{i}=1 \& sum_{i}^k B_i imesinom{k+1}{i}=k+1 end{aligned}]

    (B_0=1) 为边界,我们可以依次递推得到 (B_i),复杂度 (mathcal O(k^2))


    例题:

    给定 (n) 个数 (a_{1sim n}) 以及常数 (k),求:

    [sum_{i=1}^n sum_{j=1}^{a_i} j^k ]

    ( m Sol:)

    后者考虑通过伯努利数求得其展开多项式,我们所求变为:

    [egin{aligned} &sum_{i=1}^n sum_{j=0}^{k+1} f_j imes a_i^j \&= sum_{j=0}^{k+1} f_jsum_{i=1}^n a_i^j end{aligned}]

    于是只需要求后者。

    考虑构造多项式 (F_i(x)=sum_{j=0}^{infty} a_i^j x^j)

    那么所求即 (sum F_i(x)) 的系数序列,设为 (G(x))

    注意到 (F_i(x)) 显然可以收敛为 (frac{1}{1-a_ix}),那么所求即:

    [frac{sum_i sum_{j e i} (1-a_jx)}{prod (1-a_ix)} ]

    下面可以分治 NTT 处理,上面可以考虑组合意义,注意到下面计算式的 ([x^k]) 处系数等价于从 (n) 个括号中选出 (k)(-a_ix) 的权值和,那么分子即选出 (k) 个后再从剩余的元素中删去一个方案数,所以有 (f_i'=f_i imes (n-i))

    然后直接计算答案即可,复杂度 (mathcal O(nlog^2 n+klog k))

  • 相关阅读:
    (网页)中的简单的遮罩层
    (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
    (网页)jQuery的时间datetime控件在AngularJs中使用实例
    Maven Myeclipse 搭建项目
    MyBatis 环境搭建 (一)
    java 常用方法
    XML 基础
    JS BOM
    js 事件
    js 的使用原则
  • 原文地址:https://www.cnblogs.com/Soulist/p/13658922.html
Copyright © 2011-2022 走看看