n∑i=1m∑j=1[ij is perfect square]=min(n,m)∑k=1μ2(k)⌊√nk⌋⌊√mk⌋
考虑 ⌊√nk⌋ 有多少种不同的取值。
容易发现以 n1/3 为分界线可知有 O(n1/3) 种。
接下来处理计算 μ2 的前缀和。易知我们需要所有 ⌊nx2⌋ 处的 μ2 的前缀和。
注意到 n∑i=1μ2(i)=⌊√n⌋∑i=1μ(i)⌊ni2⌋
先不管怎么求 μ。考虑设阈值 B:对 ⌊nx2⌋≤B,线性筛;对 ⌊nx2⌋>B,使用 O(⌊nx2⌋1/3) 的整除分块计算。
后面的复杂度大约是 ∫√nB0(nx2)1/3dx=3n1/3x1/3|√nBx=0=O(n1/2B−1/6)
平衡一下,取 B=n3/7 可得复杂度为 O(n3/7)。
然后考虑求 μ。我们需要的位置是 ⌊√nx2y⌋=⌊⌊√ny⌋x⌋。
设阈值 T,≤T 的部分用线性筛,>T 的部分用杜教筛,那么后面部分的复杂度大约是 ∫nT20(ny)1/3dy=32n1/3y2/3|nT2y=0=O(nT−4/3)
平衡一下,取 T=n3/7 可得复杂度为 O(n3/7)。
然后乱写一下就过了,虽然常数贼大。
代码:
1 |
|