求自然数幂和的各种方法(还有坑)

i=1nikmodp

高斯消元

一个定理,k次方和一定可以由0~k-1次方和表示出来,设方程组解出来就好了。
O(k3)

倍增

我们设

f(n,k)=i=1nik

怎么算呢?
我们采用分治思想。
如果n是奇数那么
f(n,k)=f(n1,k)+nk

否则,我们可以先求出n/2的f,然后对于n/2+1~n中的每个数都可以表示为n/2+i
那么
f(n,k)=f(n/2,k)+i=1n/2(n/2+i)k

二项式定理
f(n,k)=f(n/2,k)+i=1n/2j=0kCjk(n/2)kjij

调换一下
f(n,k)=f(n/2,k)+j=0kCkjf(n/2,j)(n/2)kj

O(k2lognlogk)

第一类斯特林数

参考WerKeyTom_FTD的blog

S(n,k)=i=1nik

引入 第一类斯特林数
Pnm=i=0nSs(n,i)mi

发现
jk=Ss(k,k)jk

于是
jk=k!CkjPkj+Ss(k,k)jk

jk=k!Ckj(PkjSs(k,k)jk)

观察括号内的式子
PkjSs(k,k)jk=i=0kSs(k,i)jiSs(k,k)jk

PkjSs(k,k)jk=i=0k1Ss(k,i)ji

于是
jk=k!Ckji=0k1Ss(k,i)ji

S(n,k)=j=1n(k!Ckji=0k1Ss(k,i)ji)

S(n,k)=k!j=1nCkji=0k1j=1nSs(k,i)ji

S(n,k)=k!Ck+1n+1i=0k1Ss(k,i)j=1nji

S(n,k)=Pk+1n+1k+1i=0k1Ss(k,i)S(n,i)

减号前面暴力做就好了。因为它是k+1个连续自然数相乘,必然会有k+1这个因数。预处理Ss,递推S。 O(k2)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值