關於數論分塊裡r sum (sum l)的證明!

2022-04-14 03:30:41 字數 1357 閱讀 9107

今天的模擬賽裡t2要使用到數論分塊,裡面有乙個重要的坎就是關於r=sum/(sum/l)的證明,網上關於這道題的題解裡都沒有關於這個的證明,那麼我就來填補一下:

在以下的文章裡,我都會使用lo(x)表示對x向下取整,同理up(x)表示對x向上取整;

我們要求左右區間的邊界,那麼我們就不妨設 取兩個數 i 和 i『 使得lo(n/i')==lo(n/i)則,我們就可以證明

設 lo(n/i)=k;則有  k*i+p=n   (p一定有  0<=p所以 :  p'=n-k*i-k*d   ;

因為  p=n-k*i;

so p'=p-k*d;

because   k*d=n-k*i-p'=p-p'    also because  0<=p<=i

so k*d+p'=p   ->   d(max)=lo(p/k);        (this can make each other !)

because i'=i+d(max)=i+lo(p/k)=i+lo((n%i)/(n/i));

->   i+lo((n-lo(n/i)*i)/lo(n/i));

->lo(i+lo((n-lo(n/i)*i)/lo(n/i)));

->lo((lo(n/i)*i)/lo(n/i)+((n-lo(n/i)*i)/lo(n/i)));

->lo(n/lo(n/i));

證明完畢!!(學校輸入法真的難使,我也不想打英文的!)

更加帥氣的證明:

設floor(x)表示小於等於x的最大整數,那麼若有 floor(n/i)=floor(n/i') ,則i'的最大值為floor(n/floor(n/i));

證明:我們設 floor(n/i)=k ,顯然一定有整數p∈[0,i)滿足 k*i+p=n ;

則 p=n-k*i ;

設 d=i-i';

若有整數p'滿足 k=floor(n/(i+d)),n=k*(i+d)+p',

那麼p'=(n-k*i)-k*d=p-k*d,即 k*d=p'-p;

又∵ p∈[0,i) ∴當d取得最大值dmax時 k*dmax+p'=p,dmax=floor(p/k);

i'=i+dmax

=i+floor(p/k)

=i+floor((n%i)/(n/i))

=i+floor((n-floor(n/i)*i)/floor(n/i))

=floor(i+floor((n-lo(n/i)*i)/floor(n/i)))

=floor((floor(n/i)*i)/floor(n/i)+((n-floor(n/i)*i)/floor(n/i)))

=floor(n/floor(n/i))

即 i'=floor(n/floor(n/i));

得證 。

數論 數論分塊

求解圖中紅點和綠點的總數之和。求 sum k space mod space i 如果縱軸的x乙個點乙個點進行移動的話,將會非常緩慢。k i k fraci times i 於是有 sum k space mod space i sum k fraci times i n times k sum i...

整除分塊(數論分塊)

乙個有 趣的問題 求 sum n lfloor frac ni rfloor n leq 10 顯然不能直接做廢話 經過一番冷靜推理暴力打表 我們發現以下性質 1.large lfloor frac ni rfloor 最多只有 2 sqrt 種取值 證明 對於 i le sqrt,只有 sqrt ...

除法分塊 數論

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