所谓整除分块,就是按照整除的结果分块
(逃)
解析
一个关键的结论:
对于 i≤ni\le ni≤n,满足 ⌊nx⌋=⌊ni⌋\lfloor\dfrac{n}{x}\rfloor=\lfloor\dfrac{n}{i}\rfloor⌊xn⌋=⌊in⌋ 的最大的 xxx 为 ⌊n⌊ni⌋⌋\lfloor\dfrac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor⌊⌊in⌋n⌋。
证明:
设 k=⌊ni⌋k=\lfloor\dfrac{n}{i}\rfloork=⌊in⌋,那么就有 n=i⋅k+p(0≤p<i,p=nmodi)n=i\cdot k+p\pod{0\le p<i,p=n\bmod i}n=i⋅k+p(0≤p<i,p=nmodi),设 x=i+dx=i+dx=i+d,同理有 n=(i+d)⋅k+p′(0≤p′<x,p′=nmodx)n=(i+d)\cdot k+p'\pod{0\le p'<x,p'=n\bmod x}n=(i+d)⋅k+p′(0≤p′<x,p′=nmodx),化简得 p′=p−dkp'=p-dkp′=p−dk,由于 p′>0p'>0p′>0,有 d<⌊pk⌋d<\lfloor\dfrac{p}{k}\rfloord<⌊kp⌋。
那么就有:
xmax=i+dmaxx_{max}=i+d_{max}xmax=i+dmax
=i+⌊pk⌋=i+\lfloor\frac{p}{k}\rfloor=i+⌊kp⌋
=i+⌊nmodik⌋=i+\lfloor\frac{n\bmod i}{k}\rfloor=i+⌊knmodi⌋
=⌊i+n−⌊ni⌋⋅i⌊ni⌋⌋=\lfloor i+\frac{n-\lfloor \dfrac{n}{i}\rfloor\cdot i}{\lfloor\dfrac{n}{i}\rfloor}\rfloor=⌊i+⌊in⌋n−⌊in⌋⋅i⌋
=⌊n⌊ni⌋⌋=\lfloor \frac{n}{\lfloor\dfrac{n}{i}\rfloor}\rfloor=⌊⌊in⌋n⌋
证毕。
代码
(计算因数个数的前缀和)
ll calc(ll x){if(x<=0) return 0ll ans=0;for(ll l=1,r;l<=x;l=r+1){r=x/(x/l);(ans+=1ll*(r-l+1)*(x/l))%=mod;}return ans;
}