我必须编写代码来评估以下序列的值:
( pow(1,k) + pow(2,k) + ... + pow(n,k) ) % MOD
对于给定的n,k和MOD值。
我尝试在internet上搜索。我得到了一个等式。它包含zeta函数,似乎很难实现。我想要任何简单的方法来实现相同的。请注意,n的值很大,因此我们不能简单地使用强力来传递时间限制。
答案 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^i
和j
不能被p
整除,则j^((p-1) * p^(i-1))
为1
mod MOD
,因此我们可以减少k
的大小。
当然,如果(k, n) < MOD
和MOD
是素数,那么这根本无济于事。 (根据问题的出现,情况可能就是这样。)
(如果k
足够小,可以为总和生成明确的公式。但似乎对你来说k
可能足够大以使该方法难以处理。)