數論分塊:應該算是一類思想我對數論分塊的理解就是:在一類要統計$\sum_^$的數學題中,由於$f(i)$是單調的,故存在$x,y \in [i,j]$使得
$f(x)=f(y)$
。於是只要找到這段區間就可以節省計算區間內每乙個函式值的時間開銷。
時間複雜度大抵是$o(\sqrt n)$的?
只有一行乙個整數 n(0 < n < 1000000)。
只有一行輸出,為整數m,即f(1)到f(n)的累加和。
答案即為$1..x$的所有約數個數和。
我們知道換種形式答案就是$\sum_^{}⌋}$。
那麼暴力演算法來了:所以我們
1就好了。for (int i=1; i<=n; i++)
2 ans += n/i;
由於$n=10^6$,所以這個$o(n)$的演算法是能夠過去的。但是不行!這個是數論分塊的板子題,我們怎麼能夠止步於$o(n)$的演算法呢?
若用$g(i)$表示$\frac$,顯然$ans=\sum_^$,並且$g(i)$是並不嚴格單調的。
自然而然地想到,在求$g(i)$的同時能不能夠求出$[i,j]$呢?
這裡有乙個結論,$j=⌊⌋}}⌋$,下面來證明這個結論。
我們有 $j=⌊⌋}}⌋ \leq ⌋}}
\begin⌊\frac⌋\leq \frac\\\frac
故$j$是滿足條件的最大值。
1 #include2 typedef long給定兩個整數llong
ll;3
4intn;5
ll ans;67
intmain()
8
'>l
和r'>r
。對於任意x
'>x,滿足 l≤x
≤r'>l
≤x≤r,把x
'>x
的所有約數全部寫下來。
對於每個寫下來的數,只保留最高位的那個數碼。求[1,
9]'>[1,9]中每個數碼出現的次數。[1
,9]'>對於100%的資料:$1≤l≤r≤10^9$
100%
'>1≤l
≤r≤10
9'>
這裡略有不同的是,每個因數只保留最高位的數碼,相當於就是答案貢獻加在了不同的地方上。
很顯然的是這個答案是可減的,於是我們就可以用類似字首和的思想依次處理$[1,9]$。
1 #include2 typedef long這裡$get(x,p)$表示$1..x$個數中,因數最高位為$p$的答案總數。例如$p=3$,那麼最高位為$p$的數一定是$300..399$,$3000...3999$這樣的數。long
ll;3
4int
l,r;56
ll work(ll x, ll a, ll b)
714 ll get
(ll x, ll p)
1521
intmain()
22
之後的$work(x,a,b)$則表示$a..b$之間是$x$因數的個數。這一步就轉變成了$\sum_^{}⌋}$的模型,於是就可以用數論分塊做了。
至此看上去很奇怪的這道題就轉化成了那個普通模型了。
給出正整數n和k,計算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值
其中k mod i表示k除以i的餘數。
例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7
輸入僅一行,包含兩個整數n, k。
1<=n ,k<=10^9
輸出僅一行,即j(n, k)。
這裡的mod操作雖然不單調遞增,看上去好像很玄學好像要轉化成其他模型的樣子,但是我們把式子變化一下:
$$=\sum_^⌋)} \\
=n∗k−\sum_^{}{}⌊\frac⌋$$
於是我們發現又回到基本的模型了!
1 #include2 typedef longend∑i=long
ll;3
4ll n,k,ans;56
intmain()
717 printf("
%lld\n
",ans);
18return0;
19 }
1n(k
−i∗⌊
ki⌋)
=n∗k
−∑i=
1⌊ki
⌋'>∑i=1n(k−i∗⌊ki⌋)∑i
=1n(
k−i∗
⌊ki⌋
)=n∗
k−∑i
=1⌊k
i⌋'>∑i=1n(k−i∗⌊ki⌋)
初涉樹分塊
樹分塊 樹上莫隊基礎 丟乙個部落格 餘 人國的國王想重新編制他的國家。他想把他的國家劃分成若干個省,每個省都由他們王室聯邦的乙個成 員來管理。他的國家有n個城市,編號為1.n。一些城市之間有道路相連,任意兩個不同的城市之間有且僅有一條 直接或間接的道路。為了防止管理太過分散,每個省至少要有b個城市,...
數論 數論分塊
求解圖中紅點和綠點的總數之和。求 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 ...