• 求和


    第二类斯特林数的拆幂公式:
    $i^k = sum _{j = 0} ^k egin{Bmatrix} k \ j end{Bmatrix} j! {i choose j}$
    二项式反演一下:
    $egin{Bmatrix} k \ j end{Bmatrix} j! = sum _{i = 0} ^j (-1) ^{j - i} {j choose i} i ^k$
    带入题目的式子
    $sum _{i = 0} ^n sum _{j = 0} ^n 2 ^j sum _{k = 0} ^j (-1) ^{j - k} {j choose k} k ^i$
    交换和式
    $sum_{j = 0} ^n 2 ^j sum _{k = 0} ^j (-1) ^{j - k} {j choose k}sum _{i = 0} ^n k ^i$
    后面的是个等比数列求和,设$sum _{i = 0} ^n k ^i$为$a_i$,$a_i$=$cfrac{k^n-1}{k-1}$
    计算$a_i=k^n$,$-1$乘以逆元即可。
    $a$是一个完全积性函数,使用筛法+快速幂计算$a$。只有素数位置的$a$需要被计算,时间复杂度是线性的。
    公式变为:
    $sum_{j = 0} ^n 2 ^j sum _{k = 0} ^j (-1) ^{j - k} {j choose k}a_{k}$
    可以ntt计算,但是有更好的方法。
    交换和式并拆开$2$的次幂:
    $sum_{k = 0} ^na_{k} 2^j sum _{k = j} ^n (-1) ^{j - k} {j choose k}=sum_{k = 0} ^na_{k} 2^k sum _{k = j} ^n (-2) ^{j - k} {j choose k}$
    令$b_j=sum _{i = j} ^n (-2) ^{i-j} {i choose j}$
    原式变为:
    $sum_{k = 0} ^na_{k} 2^k b_{k}$
    用杨辉三角拆$b$
    $b_j=sum _{i = j} ^n (-2) ^{i-j} {i-1 choose j}+sum _{i = j} ^n (-2) ^{i-j} {i-1 choose j-1}$
    前半部分的计算:
    $b_j=sum _{i = j} ^n (-2) ^{i-j} {i-1 choose j}=b_j=sum _{i = j-1} ^{n-1} (-2) ^{i-j+1} {i choose j}=(-2)sum _{i = j-1} ^{n-1} (-2) ^{i-j} {i choose j}=(-2)(b_j-{n choose j}(-2)^{n-j})$
    后半部分:
    $b_j=sum _{i = j} ^n (-2) ^{i-j} {i-1 choose j-1}=b_j=sum _{i = j-1} ^{n-1} (-2) ^{i-j+1} {i choose j-1}=b_{j-1}-{n choose j-1}(-2)^{n-j+1}$
    综上:
    $b_j=(-2)(a_j-{n choose j}(-2)^{n-j})+b_{j-1}-{n choose j-1}(-2)^{n-j+1}$
    $b_j=-2b_j-{n choose j}(-2)^{n-j+1}+b_{j-1}-{n choose j-1}(-2)^{n-j+1}$
    $b_j=cfrac{-{n choose j}(-2)^{n-j+1}+b_{j-1}-{n choose j-1}(-2)^{n-j+1}}{3}$
    得到了一个$O(n)$的优秀爆标做法。

  • 相关阅读:
    ToString格式化
    [转]vc中socket编程步骤
    [XAML学习资料] 验证用户提供的数据ValidationRule
    VS2008下安装boost
    [ASP.NET用户验证一]Forms验证
    VISTA IIS Worker Process 已停止工作 解决办法
    [MFC入门二]四种不同对象
    删除TFS项目
    [WPF学习资料] WPF简介
    IIS7下配置PHP5
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13183845.html
Copyright © 2020-2023  润新知