數論分塊學習
演算法解析
數論分塊解決這樣的問題:\(f(n)=\sum \limits_{1\le i \le n}{g(i)\times \left \lfloor \frac{n}{i}\right \rfloor}\)
容易發現 \(\frac{n}{i}\) 是成段出現的,所以我們設這個段為 \([l,r]\),那麼 \(r = \frac{n}{\left \lfloor \frac{n}{l} \right \rfloor}\)
for (int l = 1, j; l <= n; l = r + 1)
{
r = n / (n / r);
ans += (g[r] - g[l - 1]) * (n / l) * (r - l + 1);
}
時間複雜度 \(O(\sqrt n)\)