51Nod1238最小公倍数之和V3的另一种做法

版权声明:转载注明出处,谢谢,有问题可以向博主联系 https://blog.csdn.net/VictoryCzt/article/details/85063317

前面的讲解【Blog地址


题目意思:求
i = 1 n j = 1 m l c m ( i , j ) \sum_{i=1}^n\sum_{j=1}^mlcm(i,j)
对于数据范围 n , m 1 0 10 n,m\leq 10^{10}


其实我们前面将式子化简成了:

= d = 1 n d w = 1 n d μ ( w ) w 2 S ( n d w ) S ( n d w ) =\sum_{d=1}^nd\sum_{w=1}^{\lfloor\frac{n}{d}\rfloor}\mu(w)w^2S(\left\lfloor\frac{n}{dw}\right\rfloor)S(\left\lfloor\frac{n}{dw}\right\rfloor)

其中 S ( n ) = n × ( n + 1 ) 2 S(n)=\frac{n\times(n+1)}{2}

其实这个时候我们用杜教筛筛 i = 1 n μ ( i ) i 2 \sum_{i=1}^n\mu(i)i^2 即可在 O ( n 3 4 ) O(n^{\frac{3}{4}}) 时间内做出(分块套分块再加杜教筛)。

对于 f ( x ) = μ ( x ) x 2 f(x)=\mu(x)x^2 的前缀和 F ( n ) F(n) ,我们可以根据杜教筛的套路,令 g ( x ) = x 2 g(x)=x^2 ,那么 h = f g h=f\bigotimes g 就等于( \bigotimes 为狄利克雷卷积):

= d n μ ( d ) d 2 ( n d ) 2 = n 2 d n μ ( d ) = n 2 [ n = 1 ] = [ n = 1 ] =\sum_{d|n}\mu(d)d^2\left(\frac{n}{d}\right)^2\\ =n^2\sum_{d|n}\mu(d)\\ =n^2[n=1]\\ =[n=1]

此时带入杜教筛公式即可得,其中后面要除以 g ( 1 ) g(1) ,但因为 g ( 1 ) = 1 g(1)=1 这里略去:

F ( n ) = i = 1 n h ( i ) i = 2 n g ( i ) F ( n i ) = 1 i = 2 n i 2 F ( n i ) F(n)=\sum_{i=1}^nh(i)-\sum_{i=2}^ng(i)F(\left\lfloor\frac{n}{i}\right\rfloor)\\ =1-\sum_{i=2}^ni^2F(\left\lfloor\frac{n}{i}\right\rfloor)

就可以直接递归筛了。


但是我们可以继续看,转而枚举乘积 d w dw ,令 T = d w T=dw 则可以得到原式等于:

= T = 1 n S ( n T ) S ( m T ) d T n μ ( d ) d 2 ( T d ) = T = 1 n S ( n T ) S ( m T ) T d T μ ( d ) d =\sum_{T=1}^nS(\left\lfloor\frac{n}{T}\right\rfloor)S(\left\lfloor\frac{m}{T}\right\rfloor)\sum_{d|T}^n\mu(d)d^2\left(\frac{T}{d}\right)\\ =\sum_{T=1}^nS(\left\lfloor\frac{n}{T}\right\rfloor)S(\left\lfloor\frac{m}{T}\right\rfloor)T\sum_{d|T}\mu(d)d\\

那么我们只需要杜教筛出后面 T d T μ ( d ) d T\sum_{d|T}\mu(d)d 即可分块加杜教筛,在 O ( n 2 3 ) O(n^{\frac{2}{3}}) 的时间内做出。

但是如何筛后面的那个呢?

我们来看,现在相当于求这个式子:

d = 1 n d w d μ ( w ) w \sum_{d=1}^nd\sum_{w|d}\mu(w)w

由于前面的式子和现在这个求出来的值是一样的,也就是:

d = 1 n d w = 1 n d μ ( w ) w 2 S ( n d w ) S ( n d w ) = T = 1 n S ( n T ) S ( m T ) T d T μ ( d ) d \sum_{d=1}^nd\sum_{w=1}^{\lfloor\frac{n}{d}\rfloor}\mu(w)w^2S(\left\lfloor\frac{n}{dw}\right\rfloor)S(\left\lfloor\frac{n}{dw}\right\rfloor)=\sum_{T=1}^nS(\left\lfloor\frac{n}{T}\right\rfloor)S(\left\lfloor\frac{m}{T}\right\rfloor)T\sum_{d|T}\mu(d)d

所以我们可以将 S S 相同的部分减去,那么剩下就是:

d = 1 n d w = 1 n d μ ( w ) w 2 = T = 1 n T d T μ ( d ) d \sum_{d=1}^nd\sum_{w=1}^{\lfloor\frac{n}{d}\rfloor}\mu(w)w^2=\sum_{T=1}^nT\sum_{d|T}\mu(d)d

所以相当于筛前面的那个东西,我们预处理线性筛出一部分 T = 1 n T d T μ ( d ) d \sum_{T=1}^nT\sum_{d|T}\mu(d)d 的这个,然后用杜教筛加分块继续求前面的那个即可。

另外一种解释:
相当于我们后面需要杜教筛的 d w d μ ( w ) w = w d μ ( w ) w 2 d w d\sum_{w|d}\mu(w)w=\sum_{w|d}\mu(w)w^2\frac{d}{w}
写成狄利克雷卷积的形式就是 ( i d 2 μ ) i d (id^2\cdot\mu)\bigotimes id ,我们令 f = ( i d 2 μ ) i d , g = i d 2 f=(id^2\cdot\mu)\bigotimes id,g=id^2 ,那么 f g = ( i d 2 μ ) i d i d 2 f\bigotimes g=(id^2\cdot\mu)\bigotimes id\bigotimes id^2 ,交换一下就是 ( i d 2 μ ) i d 2 i d (id^2\cdot\mu)\bigotimes id^2\bigotimes id ,前两个卷出来就是 ϵ \epsilon ,然后原式就变成 ϵ i d = i d \epsilon\bigotimes id=id ,然后杜教筛即可。
公式即为:
F ( n ) = i = 1 n i i = 2 n i 2 F ( n i ) F(n)=\sum_{i=1}^ni-\sum_{i=2}^ni^2F(\lfloor\frac{n}{i}\rfloor)

我觉得上面这种更好


代码,咕咕咕


参考资料博客:

猜你喜欢

转载自blog.csdn.net/VictoryCzt/article/details/85063317
今日推荐