遇到網際網路大廠背景調查,你需要重視了!
阿新 • • 發佈:2021-07-05
當我去寫數學題的時候化簡\(a \mod b\to a-\lfloor\frac{a}{b} \rfloor*b\)至\(O(n)\)之後開心壞了,結果發現數據範圍:\(1≤n,m≤109\)(吐血),然後看了題解苦思冥想,發現整除分塊可以將時間複雜度優化到\(O(\sqrt n)\)
整除分塊:可以用到整除分塊的形式,大致是這樣的\(\sum_{i=1}^{n}\lfloor \frac{n}{i} \rfloor\)
打表可以發現對於每一個\(\lfloor \frac {n}{i}\rfloor\)的值是一樣的,而且它們呈現塊狀分佈,再通過打表發現對於每一個值相同的塊,最後一個數為\(n/(n/i)\)
for(int l=1,r;l<=n;l=r+1){
r=(n)/(n/l);
ans+=(r-l+1)*(n/l);
}
與其他函式的聯絡
- 有時候,可能推出來的式子不一定就是一個很裸的整除分塊,可能會與某些積性函式相乘,如:μ,φ...... 這時候,我們就需要對這些函式統計一個字首和。因為,每當我們使用整除分塊跳過一個區間的時候,其所對應的函式值也跳過了一個區間。所以此時,就需要乘上那一個區間的函式值。