CQOI2007 餘數求和

2021-09-29 01:16:59 字數 902 閱讀 4439

題面

這道題用到了數論分塊

首先什麼是數論分塊 顧名思義就是分塊在數論上的應用

不過非常神奇的一點是你如果不會分塊但你還是可以會數論分塊的

所求為∑i=

1nkm

od

i\sum_^k mod i

i=1∑n​

kmod

i將這個式子改為:

∑ i=

1nk−

i×(⌊

ki⌋)

\sum_^k-i×(\left \lfloor \frac \right \rfloor)

i=1∑n​

k−i×

(⌊ik

​⌋)前面的n×k

n×kn×

k直接先算出來

後面的i

ii是單增的

而⌊ ki

⌋\left \lfloor \frac \right \rfloor

⌊ik​

⌋在一段範圍內是相等的 總共只有2

n2\sqrt

2n​種取值

因此,每次求出這一段範圍,直接計算等差數列即可

#includeusing namespace std;

inline int read()

long long ans,n,k;

int main()

printf("%lld\n",ans);

return 0;

}

數論分塊推薦一道題:尤拉心算(bz

oj

4804

)(bzoj4804)

(bzoj4

804)

具體在這篇部落格中哦!

數論2333

2333

2333

CQOI2007 餘數求和

求 ans k 1 k 2 k n 這題目應該算是數論裡比較簡單的了 求 ni 1 kmod i i 1nkm od i我們知道 a b a b a b 即 ni 1 kmod i n i 1 k i k i n k ni 1 i k i i 1nkm odi i 1 n k i k i n k i...

CQOI2007 餘數求和

傳送門 或許這也算是道神仙題?題目描述非常直白,我們把式子轉化一下,其實就是求n k k i i。而k i是可以使用除法分塊來做的 假設t k i,如果t 0,那麼它的末端就是n,這個很顯然,如果不等於0的話,那麼末端就是k t。之後我們就神奇的過了這道題 極短。include include in...

CQOI2007 餘數求和

給出n,k求k 1 n每乙個數的和 首先將原始式子變形成為nk k 1 1 k 2 2.k n n 此處的除法都是向下取整,也就是說不可以使用運算律了。那麼我們通過簡化式子,得到了乙個不能用運算律的式子。此時我們發現不能暴力去算他。於是嘗試著找了一會規律,可得到乙個 以100為例 相同的用顏色標記出...