這道題看上去很簡單,暴力隨便打,30分拿到手。但是顯然你拿30分你就炸了。
我們開始考慮優化。
發現每乙個%都是風馬牛不相及的,我們考慮轉換。
可以發現取膜的性質:
\[a \mod b = a - b \times \lfloor \frac\rfloor
\]然後這個答案就可以轉換為\(\sum_^\rfloor}\)
用乘法分配律可以把\(k\)提取,然後問題就是求出\(\sum\rfloor}\)了。
可以發現這個向下取整的東西在一定區間範圍內是一樣的,我們可以把這些一樣的一起算成一遍,這樣複雜度一定小於\(o(n)\)。
**:
#include#includelong long n, k, ans;
int main()
printf("%lld\n", ans);
return 0;
}
P2261 CQOI2007 餘數求和
數學題,無背景 給出正整數n和k,計算g n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除以i的餘數。例如g 10,5 5 mod 1 5 mod 2 5 mod 3 5 mod 4 5 mod 5 5 mod 10 0 1 2 1 0 5 5 ...
P2261 CQOI2007 餘數求和
我是題面 題意還是很清晰,很容易理解 1e9範圍明顯不能暴力,除非你能把常數優化到 frac1 但我實在想象不到用了這麼多取模怎麼把常數優化下去 我們可以把 k i 變成 k k i i 整除 那麼總的和也就從 sum k i 變成了 sum n k k i i 又可以轉化為 nk sum n k ...
P2261 CQOI2007 餘數求和
數學題,無背景 給出正整數n和k,計算g n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除以i的餘數。例如g 10,5 5 mod 1 5 mod 2 5 mod 3 5 mod 4 5 mod 5 5 mod 10 0 1 2 1 0 5 5 ...