【发布时间】:2016-12-12 17:21:16
【问题描述】:
你能帮帮我吗?我需要一个快速算法来计算以下内容:除法的余数从给定范围内的幂中的整数之和(从 A 到 B ,1 A,B A = 10,B = 15,我应该计算
((11^11) + (12^12) + (13^13) + (14^14) ) % 987654321
如果我使用这种直接方法,则需要很长时间才能计算出来。计算这种余数有什么诀窍吗?
【问题讨论】:
-
好吧,我搜索了一下,似乎“从 a 到 b 的 n^n 之和”之类的系列似乎没有封闭形式或其他有用的属性,所以恐怕你'将只是总结一堆权力。当然,在整个过程中,没有理由使用大于 987654321 的数字,所以它不会太是灾难性的。 E:如果你得到多个查询,你可以先预计算整个事物的前缀和
-
@HopefullyHelpful 没必要。 OP 需要快速模幂运算,您最大的寄存器需要能够容纳大约。模数的平方(此处为 64 位即可)。
-
@HopefullyHelpful 如果 A = 1 且 B = 10^8,如何在 1 秒内运行?
-
@PhamTrung 在具有许多逻辑内核的机器上进行快速模幂运算。
-
在每一步之后通过平方和取模进行指数应该很容易做到这一点。您可以将其与某种素筛相结合,以重用早期的数字并最大限度地减少工作。
标签: algorithm performance math optimization