题意
暴力
呵呵,快速幂
高斯消元
从k次,推到k+1次,求系数
矩阵乘法
有点复杂,向下面的算法一样,可以从k次,推到k+1次
倍增
像快速幂一样,打一个f[i][j]
拉格朗日插值法
就是设一个函数再把式子推出来。道理很简单,不细讲。
如需了解差分表,拉格朗日插值法
牛顿插值法
还不会
差分表
我们知道式子a
(二项式定理)
那么我们转换到
根据式子a
我们可以得到
进一步得到
式子b
很明显这些式子与所有的1到n的1到k-1次幂有关,所以是一个递推式
设
用s代替式子b中的部分
我们初始化s(n,0)=n+1(因为题目要求0^0=1),s(n,1)=n(n+1)/2
那么就可以递推着做自然数幂和了。
伯努利数
伯努利数原本就是处理等幂和的问题。
可以推得
因为
所以
伯努利数的证明十分复杂,有些东西其实可以不用弄懂,当做一个黑盒算法。
公式简单易记。
第一类斯特林数(Stirling)
其实第一类斯特林数的概念十分好懂。
如需了解第一类斯特林数,请转第一类斯特林数
首先我们设
根据第一类斯特林数的定义(P是排列数,C是组合数,s是Stirling)
那么我们用P每次减去一个少一位的对应斯特林式子就得到了
jk,在求和就是
Sk(n)。
所以
拆括号
因为
(证明:,那么等式两边就把Cnm消掉了
,然后,然后又把Cnm−1消掉了,依此类推,最后全部都消掉了)
在转换为用排列数的
那么我们只需要用
O(k2)地预处理出第一类斯特林数,然后按k来递推了,边界是
主要运用了第一类斯特林数与排列式P的关系。
第一类斯特林数处理自然数幂和的问题比伯努利数和差分表更好。虽然时间复杂度都是一样的,但是第一类斯特林数没有除号(用组合数的形式没有,但是排列数的形式也可以整除),不用考虑模数有没有逆元,但是差分表和伯努利数都是带除号的,模数没有逆元很容易GG,比如说有一道题叫做
小学生数学题
关系
转载并详细解说自GEOTCBRL%%%
打blog的灵感来自看了WerKeyTom_FTD
不过自我感觉十分详细。