1. 程式人生 > 遊戲 >Bloober Team澄清傳聞 《寂靜嶺》新作是否存在仍是未知數

Bloober Team澄清傳聞 《寂靜嶺》新作是否存在仍是未知數

當我去寫數學題的時候化簡\(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)\)

。得出這個結論之後可以做\(O(\sqrt n)\)的處理

for(int l=1,r;l<=n;l=r+1){
	r=(n)/(n/l);
	ans+=(r-l+1)*(n/l);
}

與其他函式的聯絡

  • 有時候,可能推出來的式子不一定就是一個很裸的整除分塊,可能會與某些積性函式相乘,如:μ,φ...... 這時候,我們就需要對這些函式統計一個字首和。因為,每當我們使用整除分塊跳過一個區間的時候,其所對應的函式值也跳過了一個區間。所以此時,就需要乘上那一個區間的函式值。