1. 程式人生 > >【BZOJ-2956】(清華集訓2012)模積和

【BZOJ-2956】(清華集訓2012)模積和

題目連結

題目描述

((nmodi)(mmodj))1<=i<=n,1<=j<=m,ij

例如對於 n=3,m=4 :
答案為(3 mod 1)(4 mod 2)+(3 mod 1) (4 mod 3)+(3 mod 1) * (4 mod 4) + (3 mod 2) * (4 mod 1) + (3 mod 2) * (4 mod 3) + (3 mod 2) * (4 mod 4) + (3 mod 3) * (4 mod 1) + (3 mod 3) * (4 mod 2) + (3 mod 3) * (4 mod 4) = 1

題解

可以先去做做餘數求和 ,我的題解

一開始看漏了ij,以為這和餘數求和一樣…
但是既然又和取模的和有關,與餘數求和的思想是差不多的。
我們有amodb=afloor(a/b)b
於是我們再來推一波式子:

i=1nj=1,jim((nmodi)(mmodj))
=((nmodi)(mmodj))i=1min(n,m)((nmodi)
(mmodi))

前面那段就是餘數求和的方法,不多講,我們來看後面一段。
不妨設nm
那麼:
i=1n((nmodi)(mmodi))
=((nn/ii)(mm/ii))
n/i=x,m/i=y
原式化為:
(mnmxinyi+xyi2)
(mn+xyi2(mx+ny)i)

到這裡式子已經推的差不多了。
我們發現可以對x,y進行除法分塊,且前面的mn可以預先處理掉。
於是我們著眼於求出一個塊內的

(xyi2(mx+ny)i)
假定當前塊內 xy=S1,mx+ny=S2
那麼要求的就是:
S1i2S2i
前面這一坨要用到平方和公式即: