自然数幂和

伯努利数

伯努利数是一个这样的数列:{1,12,16,0,130,0,142,0,130,0,}

(所有大于2的奇数项都是0)

满足:

k=0n(n+1k)Bk=0(n>0)

换个方式写:

k=0n(nk)Bk=Bn(n1)

观察上面的式子, 我们可以将{Bi}的EGF和{1,1,1,}的EGF乘起来, 得到:

B(x)ex=B(x)+xB(x)=xex1

(左边加的x是特殊处理n1的限制)

所以我们就可以用多项式求逆在O(nlogn)的时间内求出B1Bn了.

Sm(n)=i=0n1im, 那么有:

Sm(n)=1m+1k=0m(m+1k)Bknm+1k


递推

(i+1)k+1ik+1=j=0k(k+1j)ij累加得:

(n+1)k+11=i=1nj=0k(k+1j)ij=j=0k(k+1j)i=1nij

i=1nik拿出来:

i=1nik=(n+1)k+11j=0k1(k+1j)i=1nij(k+1k)=(n+1)k+11j=0k1(k+1j)i=1nijk+1

直接递推即可。


差分

我们记一个序列的k次差分后的序列为Δk

任何k次多项式的点值经过k+1次差分后都会变成全为0的序列,即Δk均为0

我们对f(n)=nk进行差分,设ck为第0条对角线的第k项,那么有f(n)=i=0kci(ni)
所以:

i=0nf(i)=i=0nj=0kcj(ij)=j=0kcji=0n(ij)=j=0kcj(n+1j+1)

关于最后那个组合数的推导i=0n(ij)=(n+1j+1),可以理解为:有j+1个球和n+1个盒子,枚举最后一个球放的位置i+1,剩下的球放置的方案就是(ij)


拉格朗日插值

可以证明i=0nik是一个k+1次多项式,因此我们可以用插值来做。
先求出x=0k+1的点值,然后将n带入即可。
时间复杂度是O(klogk)

简便实现:
设多项式为i=0k+1coefi(x)xi,根据拉格朗日插值的那个式子得到:

coefp+1(x)=coefp(x)×(xp)(pk)(xp1)(p+1)

直接将得到的系数乘点值即可。

如果要做到O(k),线性筛得到xk即可(瓶颈在于快速幂, 质数个数的级别是klogk的, 只对质数做快速幂, 时间复杂度就是O(k)的了)。


斯特林数

(nk)=nk_k!=i=0k[ki](1)kinik!k!(nk)=i=0k[ki](1)kinink=k!(nk)i=0k1[ki](1)kini

那么

i=0nik=i=0n(k!(ik)j=0k1[kj](1)kjij)=k!i=0n(ik)i=0nj=0k1[kj](1)kjij=k!(n+1k+1)j=0k1[kj](1)kji=0nij=(n+1)k+1_k+1j=0k1[kj](1)kji=0nij

至于1k+1,一定可以在(n+1)k+1_中除去。

所以直接O(k2)预处理出第一类斯特林数即可。

posted @   Hany01  阅读(1222)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
点击右上角即可分享
微信分享提示
主题色彩