• 自然数幂和


    形如 (S_k(n)=sumlimits_{i=0}^n i^k) 的式子被称为自然数幂和。

    本文介绍了求自然数幂和的若干方法,其中包括斯特林数和伯努利数的一些应用,其中证明的推导过程也有一些推式子的技巧。

    扰动法

    应用两次扰动法,当 (k geqslant 1) 时,得:

    [largeegin{aligned} S_k(n)&=sum_{i=0}^ni^k \ &=sum_{i=0}^n(i+1)^k-(n+1)^k \ &=sum_{i=0}^nsum_{j=0}^kinom{k}{j}i^j-(n+1)^k \ &=sum_{j=0}^kinom{k}{j}S_j(n)-(n+1)^k \ &=sum_{j=0}^{k-2}inom{k}{j}S_j(n)+kS_{k-1}(n)+S_k(n)-(n+1)^k \ end{aligned} ]

    得:

    [largeegin{aligned} S_{k-1}(n)&=frac{(n+1)^k-sumlimits_{j=0}^{k-2}inom{k}{j}S_j(n)}{k} \ S_k(n)&=frac{(n+1)^{k+1}-sumlimits_{j=0}^{k-1}inom{k+1}{j}S_j(n)}{k+1} \ end{aligned} ]

    直接计算可以做到 (O(k^2))。分治 (FFT) 可以做到 (O(k log^2 k))

    拉格朗日插值法

    由扰动法推得的式子,发现 (S_k(n))(k+1) 次多项式,因此可以考虑拉格朗日插值法,代入 ((0,S_k(0)),(1,S_k(1)),dots,(k+1,S_k(k+1)))(k+2) 个点值,得:

    [largeegin{aligned} f(x) &= sum_{i = 0}^{k+1} y_i prod_{i ot = j} frac{x - x_j}{x_i - x_j} \ S_k(n) &= sum_{i = 0}^{k+1} S_k(i) prod_{i ot = j} frac{n - j}{i - j} \ end{aligned} ]

    因为取值是连续的,后一项中的分子和分母可以分别计算,预处理后可以实现复杂度为 (O(k))

    考虑如何计算 (S_k(i)),对于 (i^k) 可以进行线性筛,每个素数暴力快速幂,因为小于等于 (n) 的素数个数约为 (frac{n}{ln n}),得复杂度为 (O(frac{k}{ln k}log k)=O(k))

    因此总复杂度为 (O(k))

    例题:The Sum of the k-th Powers

    第一类斯特林数

    [large x^{overline{n}}=sum_{i=0}^negin{bmatrix}n\ iend{bmatrix}x^i ]

    通过组合意义即可证明,其也可以用归纳法证明:

    已知:

    [large x^{overline{n-1}}=sum_{i=0}^{n-1}egin{bmatrix}n-1\ iend{bmatrix}x^i ]

    得:

    [largeegin{aligned} x^{overline{n-1}}&=sum_{i=0}^{n-1}egin{bmatrix}n-1\ iend{bmatrix}x^i \ (x+n-1)x^{overline{n-1}}&=(x+n-1)sum_{i=0}^{n-1}egin{bmatrix}n-1\ iend{bmatrix}x^i \ x^{overline{n}}&=(n-1)sum_{i=0}^{n-1}egin{bmatrix}n-1\ iend{bmatrix}x^i+sum_{i=1}^{n}egin{bmatrix}n-1\ i-1end{bmatrix}x^i \ x^{overline{n}}&=sum_{i=0}^{n}egin{bmatrix}n\ iend{bmatrix}x^i \ end{aligned} ]

    代入得:

    [largeegin{aligned} S_k(n)&=sum_{i=0}^ni^k \ &=sum_{i=0}^n(i^{overline{k}}-sum_{j=0}^{k-1}egin{bmatrix}k\ jend{bmatrix}i^j) \ &=sum_{i=0}^ni^{overline{k}}-sum_{i=0}^nsum_{j=0}^{k-1}egin{bmatrix}k\ jend{bmatrix}i^j \ &=sum_{i=0}^ninom{i+k-1}{k}k!-sum_{j=0}^{k-1}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ &=inom{n+k}{k+1}k!-sum_{j=0}^{k-1}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ &=frac{(n+k)!}{(n-1)!(k+1)!}k!-sum_{j=0}^{k-1}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ &=frac{n^{overline{k+1}}}{k+1}-sum_{j=0}^{k-1}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ end{aligned} ]

    直接计算可以做到 (O(k^2))。不用保证模数存在逆元,(k+1) 一定是 (n^{overline{k+1}}) 的约数。

    应用归纳法可得:

    [large x^{overline{n}} = (-1)^n(-x)^{underline{n}} \ large x^{underline{n}} = (-1)^n(-x)^{overline{n}} \ ]

    考虑对于 (x^{overline{n}} = (-1)^n(-x)^{underline{n}}),将其中 (x) 换为 (-x),得:

    [large (-x)^{overline{n}} = (-1)^nx^{underline{n}} ]

    因为有 (x^{overline{n}}=sumlimits_{i=0}^negin{bmatrix}n\ iend{bmatrix}x^i),得:

    [largeegin{aligned} (-1)^nx^{underline{n}} &= sumlimits_{i=0}^negin{bmatrix}n\ iend{bmatrix}(-x)^i \ x^{underline{n}} &= sumlimits_{i=0}^n(-1)^{n-i}egin{bmatrix}n\ iend{bmatrix}x^i \ end{aligned} ]

    应用这个式子也可以进行求解:

    [largeegin{aligned} S_k(n)&=sum_{i=0}^ni^k \ &=sum_{i=0}^n(i^{underline{k}}-sum_{j=0}^{k-1}(-1)^{k-j}egin{bmatrix}k\ jend{bmatrix}i^j) \ &=sum_{i=0}^ni^{underline{k}}-sum_{i=0}^nsum_{j=0}^{k-1}(-1)^{k-j}egin{bmatrix}k\ jend{bmatrix}i^j \ &=sum_{i=0}^ninom{i}{k}k!-sum_{j=0}^{k-1}(-1)^{k-j}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ &=inom{n+1}{k+1}k!-sum_{j=0}^{k-1}(-1)^{k-j}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ &=frac{(n+1)^{underline{k+1}}}{k+1}-sum_{j=0}^{k-1}(-1)^{k-j}egin{bmatrix}k\ jend{bmatrix}S_j(n) \ end{aligned} ]

    直接计算可以做到 (O(k^2))。不用保证模数存在逆元,(k+1) 一定是 ((n+1)^{underline{k+1}}) 的约数。

    第二类斯特林数

    [large x^n = sum_{i=0}^n egin{Bmatrix} n \i end{Bmatrix} x^{underline{i}} ]

    通过组合意义即可证明,其也可以用归纳法证明:

    已知:

    [large x^{n-1} = sum_{i=0}^{n-1} egin{Bmatrix} n-1 \i end{Bmatrix} x^{underline{i}} ]

    得:

    [largeegin{aligned} large x^{n-1} &= sum_{i=0}^{n-1} egin{Bmatrix} n-1 \i end{Bmatrix} x^{underline{i}} \ large x^n &= xsum_{i=0}^{n-1} egin{Bmatrix} n-1 \i end{Bmatrix} x^{underline{i}} \ large x^n &= sum_{i=0}^{n-1} egin{Bmatrix} n-1 \i end{Bmatrix} ix^{underline{i}} +sum_{i=0}^{n-1} egin{Bmatrix} n-1 \i end{Bmatrix} (x-i)x^{underline{i}} \ large x^n &= sum_{i=0}^{n-1} egin{Bmatrix} n-1 \i end{Bmatrix} ix^{underline{i}} +sum_{i=1}^n egin{Bmatrix} n-1 \i-1 end{Bmatrix} x^{underline{i}} \ large x^n &= sum_{i=0}^n egin{Bmatrix} n \i end{Bmatrix} x^{underline{i}} \ end{aligned} ]

    代入得:

    [largeegin{aligned} S_k(n)&=sum_{i=0}^ni^k \ &=sum_{i=0}^nsum_{j=0}^kegin{Bmatrix} k \j end{Bmatrix} i^{underline{j}} \ &=sum_{j=0}^kegin{Bmatrix} k \j end{Bmatrix}sum_{i=0}^n i^{underline{j}} \ &=sum_{j=0}^kegin{Bmatrix} k \j end{Bmatrix}sum_{i=0}^n inom{i}{j}j! \ &=sum_{j=0}^kegin{Bmatrix} k \j end{Bmatrix} inom{n+1}{j+1}j! \ &=sum_{j=0}^kegin{Bmatrix} k \j end{Bmatrix} frac{(n+1)^{underline{j+1}}}{j+1} \ end{aligned} ]

    直接计算可以做到 (O(k^2))。不用保证模数存在逆元,(j+1) 一定是 ((n+1)^{underline{j+1}}) 的约数。可以通过卷积 (O(n log n)) 求出第二类斯特林数一行后快速求解。

    伯努利数

    伯努利数前几项为 (1,-frac{1}{2},frac{1}{6},0,-frac{1}{30}),其为非整数数列,其定义为:

    [large sum_{i=0}^{n}inom{n+1}{i}B_i=[n=0] ]

    可以进行 (O(n^2)) 递推求伯努利数。还可以通过生成函数快速求伯努利数,得:

    [largeegin{aligned} sum_{i=0}^{n}inom{n+1}{i}B_i&=[n=0] \ sum_{i=0}^{n+1}inom{n+1}{i}B_i&=B_{n+1}+[n=0] \ sum_{i=0}^{n}inom{n}{i}B_i&=B_{n}+[n=1] \ end{aligned} ]

    发现左边为伯努利数的指数生成函数和指数生成函数 (e^x) 的卷积,得:

    [largeegin{aligned} B(x)e^x &= B(x) + x \ B(x) &= frac{x}{e^x-1} \ end{aligned} ]

    可以多项式求逆实现 (O(n log n)) 求伯努利数。

    这里设 (S_k(n)=sumlimits_{i=0}^{n-1}i^k),伯努利数为自然数幂和对应的多项式的系数:

    [large S_k(n)=frac{1}{k+1}sum_{i=0}^kinom{k+1}{i}B_in^{k+1-i} ]

    考虑证明,设 (F(x))(S_k(n)) 的生成函数,得:

    [largeegin{aligned} F(x) &= sum_{i geqslant 0} frac{S_i(n)}{i!}x^i \ &= sum_{i geqslant 0}sum_{j=0}^{n-1} j^i frac{x^i}{i!} \ &= sum_{j=0}^{n-1}sum_{i geqslant 0} frac{(jx)^i}{i!} \ &= sum_{j=0}^{n-1}e^{jx} \ &= frac{e^{nx}-1}{e^x-1} \ &= B(x)frac{e^{nx}-1}{x} \ &= B(x)frac{sumlimits_{i geqslant 1} frac{(nx)^i}{i!}}{x} \ &= B(x) sum_{i geqslant 0} frac{n^{i+1}x^i}{(i+1)!}\ end{aligned} ]

    因为 (left [x^k ight ]F(x)=frac{S_k(n)}{k!}),得:

    [largeegin{aligned} S_k(n) &= k!sum_{i = 0}^k frac{B_in^{k+1-i}}{i!(k+1-i)!} \ S_k(n) &= frac{1}{k+1}sum_{i=0}^kinom{k+1}{i}B_in^{k+1-i} \ end{aligned} ]

    应用伯努利数可以求出自然数幂和对应的多项式的系数。

  • 相关阅读:
    c# 扩展方法奇思妙用高级篇八:Type类扩展
    Asp.Net 上传大文件专题
    波形捕捉:(2)创建捕捉设备对象
    Capturing Waveforms【译】
    波形捕捉:(1)枚举"捕捉设备"
    C# 调用sql 2000存储过程
    HTTP请求流程(一)流程简介
    Asp.Net 上传大文件专题(4)利用ajax技术显示上传进度
    c# GDI+简单绘图(四)
    波形捕捉:(5)“捕捉缓冲区”信息
  • 原文地址:https://www.cnblogs.com/lhm-/p/13550060.html
Copyright © 2020-2023  润新知