如何快速计算该系列模数的总和?

时间:2017-07-25 16:26:25

标签: algorithm optimization modular-arithmetic

所以我遇到了这个需要计算的问题:

1 ķ +(1 + P)ķ +(1 + 2 * p)的ķ + ..... +( 1 + n * p) k %p

其中p是素数,k是严格小于p的某个数。

p小于500且n * p可以达到10 9

我能想到的唯一解决方案是从第一个到最后一个周期进行迭代,并使用取幂计算模数,但这样做成本太高我正在寻找更快的算法。

可以更快地完成吗?

1 个答案:

答案 0 :(得分:6)

对于任何整数m(1+m*p)^k % p == 1

因此,计算

(1^k + (1+2*p)^k  + (1+3*p)^k + ... + (1+n*p)^k )% p

与计算相同

(1 + 1 + 1 ... + 1) % p

括号中有n + 1个术语。

答案是(n + 1)%p