版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

仓库源文站点原文


title: 随笔 - 计算 sum(i^k) 的4种方法 categories:


只是存个代码, 阅读意义不大

<!-- more -->

法一

暴力

复杂度

法二

对于 $k$ 极小的情况我们可以用已知的公式, 如

复杂度

法三

对于 $p$ 较小的情况, 由

$$ \sum{i=1}^n i^k\equiv\sum{i=1}^n (i\bmod p)^k\pmod p $$

我们可以开个长度为 $p$ 的数组记录前缀和, 之后便可以 $O(1)$ 求得答案

复杂度

法四

利用递推式

$$ \sum{i=1}^n i^k\equiv\frac{1}{k+1}\left((n+1)^{k+1}-1-\sum{t=0}^{k-1}{ \binom{k+1}{t}\over k+1}\sum_{i=1}^n i^t\right)\pmod p $$

复杂度

代码

<details open> <summary><font color='orange'>Show code</font></summary> {% icodeweb blog lang:cpp draft-015/main.cpp %} </details>