2013-09-23 117 views
2

如何計算總和(1+a%m+a^2%m……+a^n%m)其中 m=k!, 1<=k<=12, n<=10^18。如何計算這個總和。 使用電腦和時間限制是3秒。 對不起我的錯如何計算總和(1 + a%m + a^2%m ...... + a^n%m)

+5

這個問題似乎是題外話題,因爲這是一個數學問題。 – Ben

+0

'm = k!.1 <= k <= 12.n <= 10^1'? (i = 1; i <= n; i ++)循環中的 –

+2

? ;-) –

回答

0
sum = 0; 
i = 0; 
while(i <= n){ 
sum = sum + math.pow(a,i); 
i++; 
} 
result = sum % m; 
5
1+a+a^2+...+a^n = (1+a+a^2+...+a^n)*(1-a)/(1-a) = 
= (1 - a^(n+1))/(1-a) 

換句話說,你的表情可以被計算爲:

(1 - a^(n+1))/(1-a) % m 

或者,在方案的形式,

fmod((1-pow(a,n+1))/(1-a), m) 
+1

(+1)真棒。你能想到一個原因:「m」被限制爲一個因子? – NPE

+1

如果'1 - a'沒有乘法反模mod' m'會怎麼樣?使用徽章對於這樣一個大的'n'來說效率不高。這很好,但不能解決問題。 – IVlad

+0

「a = 1」附近會不會有數字問題? – NPE