luogu
我看了一堆大佬的部落格才搞懂數論分塊
數論分塊適用於給定\(n,k\)求型如
\[\sum_^\left \lfloor \frac \right \rfloor f(l,r)
\]的式子
可將\(o(n)\)的複雜度降至\(o(\sqrt n)\)
首先定義\(l=1,r\)
其次有\[r=min(n,\left \lfloor \frac \right \rfloor} \right \rfloor)
\]可以在\(o(1)\)的時間內得出\(r\)
在\(l\sim r\)內所得的商是相同的(自行打表驗證)
容易證明(其實我也不會)這一段的商均為\(\left \lfloor \frac \right \rfloor\)
然後再\(l=r+1\)
貼個板題**
推一下式子
\begin
\sum_^k\ mod \ i &=\sum_^(k-i* \left \lfloor \frac \right \rfloor) \newline
&=n* k-\sum_(r-l+1)* \frac * \left \lfloor \frac \right \rfloor
\end
其中\(\left \lfloor \frac \right \rfloor\)是區間內的商,其他的是等差數列求和
公式推出來了**就好寫了
#includeusing namespace std;
#define ll long long
int main()
printf("%lld",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 ...