前兩天肝了整整兩天的fft,部落格暫咕
今天打算先肝個莫隊,於是複習一下整除分塊
題面:給出n,k
(1≤n
,k≤1
09
)n,k(1\le n,k\le 10^9)
n,k(1≤
n,k≤
109)
,求∑i=1
nkmo
di
\large\sum\limits_^k\mod i
i=1∑n
kmod
i推一波公式:
∑ i=
1nkm
odi=
∑i=1
nk−i
∗⌊ki
⌋=nk
−∑i=
1ni∗
⌊ki⌋
\begin &\sum\limits_^k\mod i\\ =&\sum\limits_^k-i*\lfloor\frac\rfloor\\ =&nk-\sum\limits_^i*\lfloor\frac\rfloor\\ \end
==i=1
∑nk
modi
i=1∑
nk−
i∗⌊i
k⌋n
k−i=
1∑n
i∗⌊i
k⌋
推到這裡,觀察一下⌊ki
⌋\lfloor\frac\rfloor
⌊ik
⌋,發現:到了後面i
ii大的時候⌊ki
⌋\lfloor\frac\rfloor
⌊ik
⌋可能會保持不變!
重點來看⌊ki
⌋\lfloor\frac\rfloor
⌊ik
⌋會在什麼區間內保持不變:
設⌊ ki
⌋=⌊k
j⌋=q
(i
\lfloor\frac\rfloor=\lfloor\frac\rfloor=q~(i⌊i k⌋= ⌊jk ⌋=q( i則有q i+ x=qj +y=k (0≤x
0≤ y qi+x=**+y=k~(0\le xqi +x=q j+y= k(0≤ x0≤y最極端的情況便是y=0 y=0y= 0則qi+x =qj= kqi+x=**=k qi+x=q j=k肉眼可見j=k qj=\frac j=qk 考慮到可能q∤j q\nmid j q∤j所以j=⌊ kq ⌋j=\lfloor\frac\rfloor j=⌊qk ⌋對於每乙個x xx,它所在的⌊ki ⌋\lfloor\frac\rfloor ⌊ik ⌋區間上界就是k⌊k x⌋ \frac\rfloor} ⌊xk⌋k 這樣就可以通過等差數列對每一塊的i∗⌊ ki ⌋i*\lfloor\frac \rfloor i∗⌊ik ⌋進行計算了 每塊計算公式: ( l+ r)∗( r−l+ 1)2∗ (k/l )\frac*(k/l) 2(l+r) ∗(r− l+1) ∗(k /l)肉眼可見初始塊一定是[1, 1] [1,1] [1,1 ]遞推式:r=⌊ k⌊kl ⌋⌋,l =r+1 r=\lfloor\frac\rfloor}\rfloor,l=r+1 r=⌊⌊lk ⌋k ⌋,l= r+1 有乙個細節: 如果l > kl>k l> k,那麼⌊ki ⌋= 0\lfloor\frac\rfloor=0 ⌊ik⌋= 0,會導致除以零 由此我們要加乙個特判 using namespace std; inline intmin (const int a, const int b) intmain() 這就是整除分塊的一種 傳送門 題目背景 數學題,無背景 題目描述 給出正整數 n,k計算k取模1 n的和 數學好題,短小精悍 暴力能60,之後考慮優化。如果你學過一點點數學,那麼你就知道 k i k k i i 而且不難發現,k i 必定是連續的,且在一定的i的範圍內這個值是不變的,類似於乙個階梯函式,而我們闊以通過k ... 給出正整數n和k,計算g n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除以i的餘數。例如g 10,5 5 mod 1 5 mod 2 5 mod 3 5 mod 4 5 mod 5 5 mod 10 0 1 2 1 0 5 5 5 5 5 29... 數學題,無背景 給出正整數n和k,計算g n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除以i的餘數。例如g 10,5 5 mod 1 5 mod 2 5 mod 3 5 mod 4 5 mod 5 5 mod 10 0 1 2 1 0 5 5 ...#include
洛谷P2261 CQOI2007 餘數求和
洛谷P2261 CQOI2007 餘數求和
P2261 CQOI2007 餘數求和