高效求解自然数k次幂和的方法

前言

寒假集训比赛时遇到了一道《WYF的盒子》,题目大意就是求 ni=mik p 取模的结果。
其中有的数据点满足 nm5000 k1012 ,剩下的数据点满足 n,m1012 k2000 。对于所有数据模数 p1012
其中 n m 相差很小的点显然可以使用快速幂,但是剩下的点怎么做?换言之,我们需要找到一个时间复杂度之和 k 有关的高效的求自然数幂和的算法。


普通公式

运用二项式定理我们可以推出一般的公式。

Sk=1k+1[(n+1)k+1(n+1)i=1k1Ckik+1Si]

推算过程链接: http://wenku.baidu.com/link?url=F07Cj1SxmyNr8_EriB3UrJU8tn4f3aByvpYKPvrLCoqV2HWjeXG1y6XWbgFQL8mBcP5Z0is1Sqpe0zxbDRmMSsBjt-0mQRRvvHTMqq57gpK
当然我们也可以不使用二项式定理,只研究递推关系,也可以得到相同的公式。
推算过程链接: http://blog.csdn.net/acdreamers/article/details/38929067
这种公式固然优美,时间复杂度为 O(k2) ,但是不可避免地要做除法,如果除数和模数互质那好办,直接逆元即可。但是这里显然不满足。


拉格朗日插值法&牛顿插值法

暑假时HeD大神给我们讲了这两种解法,初中党表示一脸懵逼
拉格朗日插值法其实不难,拿高中选修数论初步看看就懂了。但是还是避免不了除法。
牛顿插值法只需要差分,不需要做除,时间复杂度 O(k2) ,是很优秀的算法,然而我不会。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值