权力的总和

时间:2012-06-30 09:55:37

标签: math

我必须编写代码来评估以下序列的值:

( pow(1,k) + pow(2,k) + ... + pow(n,k) ) % MOD 对于给定的n,k和MOD值。

我尝试在internet上搜索。我得到了一个等式enter image description here。它包含zeta函数,似乎很难实现。我想要任何简单的方法来实现相同的。请注意,n的值很大,因此我们不能简单地使用强力来传递时间限制。

3 个答案:

答案 0 :(得分:1)

Newton's identities可能有所帮助。计算以1..n为根的多项式的系数。那非常微不足道。然后使用身份。

这是我看到权力总和时想到的第一件事。

我认为它与模块化算术很好地兼容 - 只有乘法和加法。

我必须承认,牛顿的身份只是术语的重新排列,因此这里的速度不会增加。

答案 1 :(得分:1)

只是使用PYTHON

k=input("Enter value for K: ")
n=input("Enter value for N: ")
mod=input("Enter value for MOD: ")
sum=0
for i in range(1,n+1):
    sum+=pow(i,k)
result=sum % mod
print mod

可能这段代码会有所帮助。

答案 2 :(得分:0)

我同意math.stackexchange.com是一个更好的选择。

但这里有随机事实,根据参数,可能会使问题更易于管理。

首先,因子MOD,求解每个素数幂因子,然后使用中国剩余定理来找到MOD的答案。因此,不失一般性,你可以假设MOD是一个主要的力量。

接下来,请注意1^k + ... + MOD^k始终可以被MOD整除。因此,您可以将n替换为n mod MOD

接下来,如果MOD = p^ij不能被p整除,则j^((p-1) * p^(i-1))1 mod MOD,因此我们可以减少k的大小。

当然,如果(k, n) < MODMOD是素数,那么这根本无济于事。 (根据问题的出现,情况可能就是这样。)

(如果k足够小,可以为总和生成明确的公式。但似乎对你来说k可能足够大以使该方法难以处理。)