这看起来像Python,所以我假设这就是你正在使用的(你应该用你正在使用的语言标记你的问题)。
最大的问题是,i**i
是巨大的,所以Python使用大整数来跟踪一切。由于2e6 ^(2e6)有12602060个数字,因此计算速度太快(并且超过您需要的10个数字)。这也意味着我将模数转换成循环的建议可能没有帮助。
解决的办法是,当你服用幂(详见Modular exponentiation取模。一些实现arehere。使用Python使它更简单,因为你不必担心整数溢出(其中,具有讽刺意味的是什么原因导致你原来的问题)
但是Python的使这更容易,因为pow
允许你指定一个可选的模所以,你可以重写你的原始代码为:。
n = int(input())
if (1<=n<=2e6):
s = 0
for i in range(1,n+1):
s += pow(i,i,10**10)
print(s%(10**10))
但是我们可以简化这更进一步河Python也有一个sum
功能,让你可以使用一个列表的理解和把上面的
n = int(input())
if (1<=n<=2e6):
s = sum(pow(i,i,10**10) for i in range(1,n+1))
print(s%(10**10))
但是这是愚蠢分配一个变量只有一步。所以,你会重写为
n = int(input())
if (1<=n<=2e6):
print(sum(pow(i,i,10**10) for i in range(1,n+1)) % 10**10)
但是,你可能更愿意使用Python的命令行界面,而不用担心检查输入:
sum(pow(i,i,10**10) for i in range(1,2*10**6+1)) % 10**10
目前还不清楚你问什么。计算该和的代码? – 2014-09-20 20:42:46
首先把这个问题提到“数学”,然后用不同的N值进行游戏并写下你发现的东西。你必须先询问才能尝试。 – 2014-09-20 20:45:52
我有通过N使用循环的代码,但它需要太多时间才能完成N> 1000000 – 2014-09-20 20:46:06