這看起來像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