第二类斯特林数的拆幂公式:
$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)$的优秀爆标做法。