數論分塊學習

legendcn發表於2024-07-24

數論分塊學習

演算法解析

數論分塊解決這樣的問題:\(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)\)

相關文章