W
e
l
c
o
m
e
: )

DIVCNT

DIVCNT 1

link

首先将答案变为 \(2\sum_{i=1}^{B}\lfloor\frac{n}{i}\rfloor-B^2\),其中 \(B=\lfloor\sqrt{n}\rfloor\)

不需要很繁杂的推导,考虑 \(xy=n\)\(y\le B\) 的交集部分,与 \(x\le B\) 的部分对称,减去交集 \(B^2\) 就行。

那么我们只需要计算 \(xy=n\)\(y\le B\) 的交集部分。

考虑差集部分内的整点,取其下部的凸包,点数证明详细见这里的 4.6

考虑凸包上任意相邻点 \(A(x, y), B(x+u, y-v)\),注意 \(AB\) 可以不是凸包顶点(凸包边可能经过整点),满足 \(u, v\) 互质

计算线段左侧整点,设 \(C(x, y-v)\)\(AC\) 左侧矩形单独算,贡献 \(xv\)

考虑直角三角形 \(ABC\) 内部整点,其中

\(i=S-\frac{b}{2}+1=(\frac{2S+2-b}{x})\)

左边的点在 \(xv\) 中算过了,有 \(v\)

\(y=v-\frac{v}{u}x\) 上的整点数量是 \(\gcd(u, v)-1\)

\(2S=uv, b=(u+1)+(v+1)-1+(\gcd(u, v)-1)=u+v+1\)

\(ans=xv+i+u-1=xv+\frac{uv+2-(u+v+1)}{2}+u-1=xv+\frac{(u-1)(v+1)}{2}\)

另加 \(u-1\) 的原因是三角形横边非端点的点没算 。

接下来,拟合外部凸包,从 \((\lfloor\frac{n}{B} \rfloor, B+1)\) (即左上顶点往左上走一步)开始,发现线段斜率在 \([-1, 0)\) 之间,考虑 SBT 二分斜率(此时的“斜率”变为正数),每次二分到一个斜率就暴力跳,一直跳到下一次跳会跳进曲线,此时 SBT 二分下一次跳的斜率,设 \(mid\) 为中间分数,此处假设 \(l>r\)\(l\) 为最后一个跳不进去的斜率。

如果 \(mid\) 能不跳进去那么让 \(r=mid\)(我们希望找到绝对值最大的斜率),否则让 \(l=mid\),但这样我们会无穷无尽二分下去。停止条件是若 \(mid\) 跳进去了,且 \(r>f'(x+mid)\)(即最小的斜率比最大斜率平移图像后的切线还大,说明 \((mid, r)\) 中间的全都会跳进去)。

复杂度 \(O(\sqrt[3]{n}\log n)\),注意最后一段 \(O(n^{\frac{1}{3}})\) 需要暴力防止复杂度退化。

圆内整点

懒得搬

posted @ 2025-10-17 19:02  127_127_127  阅读(3)  评论(0)    收藏  举报