【BZOJ2956】模积和-数论分块

2019-04-14 16:23发布

测试地址:模积和
做法:本题需要用到数论分块。
题目要求的是:i=1nj=1m[ij](nnii)(mmjj)" role="presentation" style="position: relative;">i=1nj=1m[ij](nnii)(mmjj)
也就是:i=1n(nnii)j=1m(mmjj)i=1min(n,m)(nnii)(mmii)" role="presentation" style="position: relative;">i=1n(nnii)j=1m(mmjj)i=1min(n,m)(nnii)(mmii)
减号前面那个部分我们在BZOJ1257中讨论过如何用数论分块求了,主要是后面那个部分,我们拆开后发现这个式子等于:
nmmin(n,m)mi=1min(n,m)niini=1min(n,m)mii+i=1min(n,m)nimii2" role="presentation" style="position: relative;">nmmin(n,m)mi=1min(n,m)niini=1min(n,m)mii+i=1min(n,m)nimii2
第一项直接算,第二、三项数论分块,这里只讨论第四项。
我们知道不同的ni" role="presentation" style="position: relative;">ni将区间分成2n" role="presentation" style="position: relative;">2n块,那么不同的ni" role="presentation" style="position: relative;">nimi" role="presentation" style="position: relative;">mi共同把区间分成了多少块呢?答案是不超过2(n+m)" role="presentation" style="position: relative;">2(n+m)块,证明很容易这里就不讲了,总之也用数论分块算这一块,需要用到i=1ni2=n(n+1)(2n+1)6" role="presentation" style="position: relative;">