除法分塊小結

2021-09-26 14:42:10 字數 3389 閱讀 8462

例題:

求 ∑i=

1n⌊n

i⌋

\sum_^n \lfloor \frac n i \rfloor

∑i=1n​

⌊in​

o(n

)o(n)

o(n)

的做法很顯然,但是一般n會很大,於是有了除法分塊。

對於一段連續的 i

ii,⌊ni

⌋\lfloor \dfrac n i \rfloor

⌊in​

⌋ 可能是相同的,比如說當 i

ii 的值在區間 [6,

10]

[6,10]

[6,10]

時,⌊ni⌋

=1

\lfloor \dfrac n i \rfloor=1

⌊in​⌋=

1,都是相同的,於是問題轉變成了要找到這些區間。

於是有了這樣的遞迴過程(證明在下面):

int l=

1,r;

while

(l<=n)

看起來是很簡單,證明事實上也很簡單。

l

ll 的初值為 1

11 是毫無疑問的,遞迴時 l=r

+1

l=r+1

l=r+

1 也是毫無疑問的,重點時 r

rr 的值是如何確定的。

證明1(反證法):

顯然 r

rr 滿足 ⌊nr

⌋=⌊n

l⌋

\lfloor \dfrac n r \rfloor=\lfloor \dfrac n l \rfloor

⌊rn​⌋=

⌊ln​

⌋,需要證明的是 r

rr 是這個區間的邊界。

設 r

rr 不是這個區間的邊界,那麼至少有 r+1

r+1r+

1 滿足 ⌊nr

+1⌋=

⌊nl⌋

\lfloor \dfrac n \rfloor=\lfloor \dfrac n l \rfloor

⌊r+1n​

⌋=⌊l

n​⌋。

設 ⌊ nr

⌋=⌊n

l⌋=x

\lfloor \dfrac n r \rfloor=\lfloor \dfrac n l \rfloor=x

⌊rn​⌋=

⌊ln​

⌋=x。

因為 ⌊nr

+1

⌋\lfloor \dfrac n \rfloor

⌊r+1n​

⌋ 是向下取整,所以有

⌊ nr

+1⌋×

(r+1

)≤

n\lfloor \dfrac n \rfloor\times (r+1) \leq n

⌊r+1n​

⌋×(r

+1)≤nx×

(r+1

)≤

nx \times (r+1) \leq n

x×(r+1

)≤nx×(

r+1)

x≤⌊n

x⌋

\dfrac x\leq \lfloor\dfrac n x \rfloor

xx×(r+

1)​≤

⌊xn​

⌋ 因為 r=⌊

nx

⌋r=\lfloor \dfrac n x \rfloor

r=⌊xn​

⌋,那麼有

x ×(

r+1)

x≤

r\dfrac x\leq r

xx×(r+

1)​≤

r r +1

≤r

r+1\leq r

r+1≤r

柿子不成立,則得證。

證明2:

依然設 ⌊nl

⌋=

x\lfloor \dfrac n l \rfloor=x

⌊ln​⌋=

x。現在要找到乙個最大的 r

rr,滿足 x×r

≤n

x \times r \leq n

x×r≤n。

移項得 r≤⌊

nx

⌋r \leq \lfloor \dfrac n x \rfloor

r≤⌊xn​

⌋ 所以 r

rr 的最大值為 ⌊nx

⌋\lfloor \dfrac n x \rfloor

⌊xn​⌋。

時間複雜度為 o(2

n)

o(2\sqrt n)

o(2n​)

,這個也很好證明,當 x≤n

x\leq \sqrt n

x≤n​

時,xx

x 只有 n

\sqrt n

n​種取值,也就是說這樣的塊數不會超過 n

\sqrt n

n​塊;當 x≥n

x \geq \sqrt n

x≥n​

時,有 ⌊nx

⌋≤

n\lfloor \dfrac n x \rfloor \leq \sqrt n

⌊xn​⌋≤

n​,也就是說此時 l

ll 和 r

rr 的取值都 ≤

n\leq \sqrt n

≤n​,所以這樣的塊數也不會超過 n

\sqrt n

n​塊。如果將問題的形式轉變一下,比如說:

∑ i=

1n(⌊

ni⌋)

k\sum_^n (\lfloor \frac n i \rfloor)^k

i=1∑n​

(⌊in

​⌋)k

又比如說

∑ i=

1n⌊n

i⌋⌊m

i⌋

\sum_^n \lfloor \frac n i \rfloor \lfloor \frac m i \rfloor

i=1∑n​

⌊in​

⌋⌊im

​⌋更比如說

∑ i=

1n(⌊

ni⌋−

⌊mi⌋

)k

\sum_^n (\lfloor \frac n i \rfloor-\lfloor \frac m i \rfloor)^k

i=1∑n​

(⌊in

​⌋−⌊

im​⌋

)k不管如何變,這些其實都是可以用除法分塊來做的,不要被形式迷惑了。

Fear Factoring 除法分塊)

借鑑 無法估計他的值時最好用無符號的long long 除法分塊 區塊值 區塊始末 舉個例子 12 次數是有12 n算出來的 像當n 5時 12 5 2,也就是說5出現了兩次 1 12次 2 6次 3 4次 4 3次 5 2次 6 2次 7 1次 8 1次 9 1次 10 1次 11 1次 12 1...

除法分塊 數論

問題 當我們暴力的時候時間複雜度為o n 但是我們可以把時間複雜度降到o sqrt n 這點時間優化在數論中可是不能小視的。除法分塊 所謂分塊,就是把一段數分成不同的區間,而這些區間的每乙個數除以同乙個數的值是相同的,所以我們就把這些區間統一處理,就不用再來乙個乙個遍歷 例 問題中我們假設n 10。...

Dividing(除法分塊總結)

傳送門 題意 橫縱座標均有個範圍 1,n 1,k 求在這個範圍裡滿足要求點的數量,要求如下 畫圖推點易得,每一列的點數 利用o根號n除法分塊就可以算出答案,最後還要注意第一列多算了n要減掉 define crt secure no warnings include include include i...