【问题标题】:How to calculate sum of this series modulo m fast?如何快速计算这个系列模m的总和?
【发布时间】:2017-07-25 16:26:25
【问题描述】:

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

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

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

p 小于 500,n*p 最大可达 109

我能想到的唯一解决方案是从第一项迭代到最后一项并使用指数计算模数,但这太昂贵了,我正在寻找一种更快的算法。

有没有可能做得更快?

【问题讨论】:

  • @JohnColeman 哦,天哪!不完全是作业,但看起来我想得不够。
  • @JohnColeman 看起来像,我可以接受评论作为答案吗?

标签: algorithm optimization modular-arithmetic


【解决方案1】:

对于任何整数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

【讨论】:

  • 我无法想象有人拥有比这更快的算法! :P
  • 有n+1个词条。
猜你喜欢
  • 2018-09-17
  • 2018-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多